• ベストアンサー

$_GETで2バイト文字列を取得することは可能?

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

  • THUBAN
  • お礼率76% (771/1002)
  • PHP
  • 回答数12
  • ありがとう数14

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.11

#10> ウチの環境の場合 function uuee(uu) { return(escape(uu).replace(/\+/g,"%2b")); } で 新しいフォルダを変換した場合 /%u65B0%u3057%u3044%u30D5%u30A9%u30EB%u30C0 になります。 これが、 %u3057%u3044の部分(しい)が %u30FBmicro;%u30FBcent; になるのは、 「しい」がSJISで82B582A2になるので、 82:わかんない文字→ナカグロ B5:μ(マイクロ)→µ 82:わかんない文字→ナカグロ A2:¢(セント)→¢ の様な感じで変換されているようです。 それで、なんで'&'がなくなっているのかもよくわかりませんが なんか変な処理してませんか? magic_quotes は、とりあえず関係なさそうですけど・

THUBAN
質問者

お礼

自己解決いたしました! 原因は、やはりフォルダ名を渡す時点で、バケていたようです。 htmlentities()を用いて、渡していたのですが、 第三番目の引数を指定せずに渡していたので、 ISO-8859-1 文字セットがデフォルトの文字エンコーディングとして使用されました。 第三番目の引数に、"SJIS"を指定して、 $_GETで取得した値を、教えていただいたソース「すごくちからわざ(php4版)」を 使用させていただき変換させてみたところ、 全角ひらがな、全角カタカナ、漢字のフォルダ名については、 正常な値となり、認識しました。 (ただ、半角カタカナは、まだダメみたいですが…) <参考:htmlentities()> http://php.s3.to/man/function.htmlentities.html 長々とお付き合いくださって、本当にどうもありがとうざいました。 根本原因にたどり着くまで、非常に助かり、 また、「すごくちからわざ(php4版)」も、とてもありがたいコードと なりました。 どうも、ありがとうございました!m(__)m

THUBAN
質問者

補足

長くお付き合いいただき、本当にすいません。恐縮です。m(__)m 抜粋なので、これでおわかりになるかどうかわかりませんが、 さらにソースの一部を付け加えて書きます。 <SCRIPT> parent.lsctl.oroot.valor="root=['','','','',0,'','m0',0,0,[ ['/','javascript:mmexec(\"/\")','','',0,'','',0,0,['%%','/']] ]]"; eval(parent.lsctl.oroot.valor); parent.lsctl.oroot.treedeep=0; parent.lsctl.oroot.treeleaves=0; parent.lsctl.oroot.treeheavy=0; heavy=parent.lsctl.oroot.treeheavy; </SCRIPT> function uuee(uu) { return(escape(uu).replace(/\+/g,"%2b")); } function mmexec(s) { parent.lstop.location.href='hoge.php?aaa='+uuee(s); return true; } -------- <SCRIPT></SCRIPT>の部分は実際は呼び出していて、 ちょっと複雑なので、取りあえず、走らせた後、 ブラウザのソース表示で表示させたままのをコピペしました。 -------- では、function uuee(uu)のescape処理に間違いなさそうで、 問題は、function mmexec(s)に渡している値が おかしいかも??という感じでしょうか?

その他の回答 (11)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

マルチバイト文字の場合、フォームでURLエンコードされていると思うので やはり、urldecode してやればいいはずです。 多分、urldecode した文字列が文字コードが違うのだと思います。 mb_convert_encoding してやればいいかと思います。

THUBAN
質問者

補足

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

関連するQ&A

  • 半角文字と全角文字のencodeのちがい

    お世話になります。 Linux JSP-Servletにて開発を行っているのですが。 JSPにて、半角の「ア」と全角の「あ」をURLEncoder.encodeでエンコードし、Servletに送信し、 Servlet内でURLDecoder.decodeでデコードしようとしているのですが、半角の「ア」はうまくencode,decodeされている(デバッグで出力すると「ア」と表示されている)のですが、全角の「あ」はうまくdecodeして「あ」と出力されません、URLEncode、URLDecodeは全角文字では使用できないのでしょうか? Linuxにて全角日本語を扱うときの方法について ご存知のかたよろしくお願いします。

    • ベストアンサー
    • Java
  • エンコードされたものを、$_GETしたら...

    よろしくお願いします。グーグルdirectory検索のパラメータ%E3%82%A2%E3%83%BC%E3%83%88を使ったWEBアプリを作ろうと思っています。 $query ='%E3%82%A2%E3%83%BC%E3%83%88/' ; //これは'アート/'ディレクトリに対応している print '<a href="'.$_SERVER['PHP_SELF'].'?query='.$query.'">アート</a>'; のリンクをブラウザで実行して、$_GET['query']して、$queryに代入してprintしたところ、'アート/'と表示されました。 '%E3%82%A2%E3%83%BC%E3%83%88/'を何度も持ち歩きたいと思っているので、'アート/'となってもらっては困るのです。なぜなら、この$query ='アート/'を次に$_GETで受け取ると、 'アーチE'と表示されたからです。 '%E3%82%A2%E3%83%BC%E3%83%88/'のまま <a href="'.$_SERVER['PHP_SELF'].'?query='.$query.'">アート</a>で、 次に渡して、$_GET['query']で受取る方法はないでしょうか? または、'%E3%82%A2%E3%83%BC%E3%83%88'をデコードして'アート'にする関数などありますか?  urlencode('アート');は、'%83A%81%5B%83g'という少し短いものになり、これは使うことができないのです。

    • ベストアンサー
    • PHP
  • エクセルシートの文字列加工について

    エクセルのシートのA列に"全角ひらがな漢字"の文字列と"半角英数"の文字列を含むセルが縦に並んでいます。約200行。 ■この中から、"全角ひらがな漢字"の文字列を右となりのB列に、"半角英数"の文字列をさらに右となりのC列に、それぞれコピーしたいのですが、関数・マクロなどでいい方法がありましたら教えて下さい。 ■それから、半角英数文字列のC列から、""で囲まれた文字列のみをさらにD列にコピーしたいのです。 文字列の長さが統一されていれば、比較的簡単なのですが、今回は文字列の長さが不規則です。よろしくお願いします。

  • 文字数を取得したい

    漢字を含んだ文字列の文字数を取得したのですがうまくいきません。 どなたか教えてください。 例: 「asetg漢字」という文字列だったら、7文字として取得したい。 上記の例で、lstrlenや、MFCの関数(String)で文字数の取得を試みたのですが、バイト数で取得してしまうため、うまくいきませんでした。

  • PHPからjavascriptへGETで値を渡すとき

    初歩的な質問で失礼いたします。 PHPからjavascriptへGETで値を渡すときにマルチバイト文字が文字化けしてしまいます。 javascriptのjQueryというライブラリを利用しています。 具体的には、 -------------- test.js -------------- var url = 'test.php?code=' + code; $.get(url, function(data){ alert(data); } -------------------------------------- --------------- test.php ------------- $input = $_GET['code'];  ・・・mysqlの処理・・・ echo $output; --------------------------------------- という処理をしています。 test.js → test.phpへ渡す値はマルチバイトではないので問題ないのですが、 test.php → test.jsへ返す値はマルチバイトで文字化けしてしまいます。 php側でrawurlencode関数でエンコードしてから、javascript側でdecodeURI関数を使用してデコードしたのですが、うまくデコードできませんでした。 恐らくデコードの仕方が悪いんだと思うんですが。。。 分かりにくい説明で恐縮ではございますが、ご回答をお願いいたします。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • htmlspecialchars()について

    htmlspecialchars()関数で、クエリー文字列をHTMLエンティティーに変換してるはずなのですが、中身をダンプしたり、ジャンプしたページのクエリーを見ても、変換されておらず、生の 引数が表示されています。どうすれば、%2ケタなどの文字列で表示されるのか、ご指導お願い致します。スクリプトは下記のようなものです。なお、encoder.php, decoder.php は、両方UTF-8でエンコードしたスクリプトです。 --------------------------------------------------------------------------------------------------------- ジャンプ元:[encoder.php] <!doctype html> <html> <head><title>URLエンコード</title> <meta charset="UTF-8"> </head> <body> <br><br> <center> <?php $input = "空条"; $from = 1; $input2 = urlencode($input); $from2 = urlencode($from); $query_string = 'name='.$input2.'&from='.$from2; echo '<a href="decoder.php?'.htmlspecialchars($query_string, ENT_QUOTES, 'UTF-8').'">エンコード</a>'; ?> </center> </body> </html> -------------------------------------------------------------------------------------------- ジャンプ先「decoder.php」 <?php $name1 = $_GET['name']; $from1 = $_GET['from']; $name2 = urldecode($_GET['name']); $from2 = urldecode($_GET['from']); echo 'デコード前 '; echo '名前:'.$name1.' フロム:'.$from1.'<br>'; echo 'デコード後 '; echo '名前:'.$name2.' フロム:'.$from2; ?>

    • 締切済み
    • PHP
  • Ethnaを利用したURLパラメータのマルチバイト文字とエンコード処理

    前画面よりhttp://localhost/?action_abc=true&test=あいうえお という画面へアクセスした時、 abc画面でtestパラメータを出力すると何故かShift_JISで表示されてしまい、 文字化けを起こしてしまいます。 (前画面・abc画面のactionやview、テンプレートはEUC-JPで作成、 URLパラメータにはurlencode()、urldecode()を使用) その為、出力する前にmb_convert_encoding()を使用しなければならない羽目になっています。 EthnaかPHPの仕様上、URLパラメータは必ずShift_JISになってしまうのでしょうか? また同じ関係で、urlencode()をした時点で、IEだと%~%~・・・と全ての文字が エンコードされるのですが、Firefoxだとhtmlspecialchars()のような動作をし、 エンコードが上手く出来ません。 (Firefoxの仕様上、そのリンクを押した時点でマルチバイトはエンコードされるようですが) 正しくエンコード・デコードさせる方法としてはどうするのが良いのでしょうか? どなたかご教示願います。

    • ベストアンサー
    • PHP
  • 日本語入力IME2002で、平仮名から全角英数に変えるやり方を教えて下さい。

    PC初心者です。 言語バーの平仮名「あ」をクリックすると、半角英数表示になってしまい、 全角英数文字を入力したい時は、半角英数表示部分をクリックして全角 英数を選択してクリックして使ってます。 この使い方は・・IME22002の本来の使い方なんでしょうか・・? 「CapsLock・英数・漢字番号」キーの切り替えだけで・・平仮名と全角 英数の切り替えはできないのでしょうか・・・? 全角英数を使いたい時に、いちいち半角英数表示部分をクリックして選択する のが面倒なんですが・・・。 みなさんはどうされているのか・・お聞きしてみたくて投稿させて頂きました。 よろしくお願いします。

  • excelで文字列の切り抜き

    excel2003でファイル名を取得したいのですが、 あるセルにc:\test\test.xlsと記入したら 隣のセルに自動でtest.xlsと表示させるにはどうしたらいいのでしょうか? 関数で表示したいのですが、フォルダが構成がいつも同じではなくても、 対応できる方法はありませんか?

  • file_get_contents関数で引数をURLにすれば、HTML

    file_get_contents関数で引数をURLにすれば、HTMLソースを取得できるのはわかるのですが、 例えば、URLが制限 255バイト?を超える場合、GETでなくPOSTタイプでHTMLを取得したいのですが、file_get_contents関数のように手軽にPOSTタイプで取得できる関数はありますか? PHP5を使っています。

    • 締切済み
    • PHP