アプリ版:「スタンプのみでお礼する」機能のリリースについて

2バイトで作成されたフォルダ名(漢字やひらがななど)を、
ブラウザにツリー表示して、それがクリックされた時に
クリックされたフォルダ名を取得して、
ブラウザがそのフォルダ先を参照し、
フォルダ中のファイル名をブラウザ上に表示できるようにしています。

$_GETを用いて、フォルダ名を取得しているのですが、
2バイトのフォルダ名だと、中身がどうやらバケています。
フォルダ名が英数半角の時は、上手く処理されるのですが、
漢字やひらがななどの2バイトのフォルダ名だと、
どうしても上手くいきません。
エンコードのurlencode()関数やデコードのurldecode()関数
を用いて、いろいろやってみましたが、上手く変換してくれません。
URLと違って、パス名、フォルダ名なので、2バイトだとそもそも
$_GETで取得すること自体が無理なのでしょうか?
どなたか詳しい方、ご教授いただけると幸いです。
よろしくお願い致します。

A 回答 (12件中11~12件)

$_GETで取得ということはもしかして


<A href="xxx.php?name=日本語フォルダ名">
ということでしょうか。

だとしたら先にこのリンクを表示する時点で
urlencodeしておかなければいけません。

あとはphp.iniのマルチバイト関連の設定を見直す。

この回答への補足

試行錯誤してみていますが、どうも上手く行きません。
もし、おわかりになるようであれば、ご教授下さいませ。m(__)m

ブラウザに表示させてあるフォルダ名をクリックしたときに、
xxx.php?name=/%u65B0%u30FBmicro;%u30FBcent;%u30D5%u30A9%u30EB%u30C0
のような感じで送信されているようで、$_GETで取得しても、
バケてしまって、正しいフォルダ先に飛んでくれないのです。

例えば、
 新しいフォルダ
という名称のフォルダだと、
/%u65B0%u30FBmicro;%u30FBcent;%u30D5%u30A9%u30EB%u30C0
のようにバケます。
(一番最初の'/'はaddslashesでバックスラッシュを挿入しています)

また、
 XYZ新しいフォルダ
という名称のフォルダだと、
/XYZ%u65B0%u30FBmicro;%u30FBcent;%u30D5%u30A9%u30EB%u30C0
のように、最初の半角英字(XYZ)は正しく取得されますが、
その後の2バイト文字は、同様にバケます。

以下、php.iniの関連しそうなところの設定を抜き出してみました。
[mbstring]
; language for internal character representation.
mbstring.language = Japanese

; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
mbstring.internal_encoding = EUC-JP
;mbstring.internal_encoding = SJIS

; http input encoding.
;mbstring.http_input = auto
mbstring.http_input = ASCII,JIS,EUC-JP,SJIS

; http output encoding. mb_output_handler must be
; registered as output buffer to function
;mbstring.http_output = SJIS
mbstring.http_output = EUC-JP

; enable automatic encoding translation according to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
; portable libs/applications.
mbstring.encoding_translation = Off
;mbstring.encoding_translation = On

; automatic encoding detection order.
; auto means
;mbstring.detect_order = auto
mbstring.detect_order = ASCII,JIS,EUC-JP,SJIS

; substitute_character used when character cannot be converted
; one from another
mbstring.substitute_character = none;

補足日時:2006/03/01 11:51
    • good
    • 0

マルチバイト文字の場合、フォームでURLエンコードされていると思うので


やはり、urldecode してやればいいはずです。
多分、urldecode した文字列が文字コードが違うのだと思います。
mb_convert_encoding してやればいいかと思います。

この回答への補足

ありがとうございます。
mb_convert_encodingも用いていろいろやってみましたが、
やはりだめなようです。

補足日時:2006/03/01 11:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!