• ベストアンサー

エンコードされたものを、$_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'という少し短いものになり、これは使うことができないのです。

  • brosis
  • お礼率94% (100/106)
  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

さらにもう一回urlencodeを掛けるとよいと思います。 $query ='%E3%82%A2%E3%83%BC%E3%83%88/'; print '<a href="'.$_SERVER['PHP_SELF'].'?query='.urlencode($query).'">アート</a>'; もう一回 %文字を %25と置き換えていくので、生成されたurlは、かなり冗長ではあるが、自動urldecodeされた $_GET['query'] は元の$queryと同じになるはず。 urldecode($_GET['query'])またはurldecode($query) で'アート/'になるはずですけど、 3文字程度だと文字コードセットによっては誤変換があり得るので、その場合は、php.iniの mbstring.detect_order = auto を、利用している文字コードセットを先に記述するように変更して下さい。

brosis
質問者

お礼

複数回urlencode使えたのですか! とりあえず、解決しました。ありがとうございます。 しかし、自分の質問の仕方に自信がなかったので、的確に答えていただいて驚いています。

その他の回答 (2)

  • ma2shin
  • ベストアンサー率41% (69/167)
回答No.3

ページをEUC-JPで作ってやればすべて解決しそうな気がしますが、SJISで作ると特定の文字でバックスラッシュがでます。

brosis
質問者

お礼

回答ありがとうございます。 自分はUTF-8でページを作っていますが、

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

>または、'%E3%82%A2%E3%83%BC%E3%83%88'をデコードして'アート'にする関数などありますか? > urlencode('アート');は、'%83A%81%5B%83g' どっちも元は「アート」だというのなら上と下とで文字コードが違ってますよ。 上がUTF-8で下がShiftJIS。 その辺きちんと考慮してやれば urlencode で用を果たせませんか?

brosis
質問者

お礼

いつもありがとうございますsakusaker7さん。 自分は文字コードに対して弱いので勉強になります。

関連するQ&A

  • URLエンコードした配列を使う方法

    <php $data[5] = array(6,4,3,7,9); ?> <a href='image.php? <?php print http_build_query($data,'','&'); ?> '>リンク先</a> リンク先へのURLの後ろにhttp_build_queryを使いつけて 送り側で$_GETで受け取って配列を使うようなことを しようと思ったのですが Undefined index: dataと言われてうまくいきません。 どのようにして配列を取り出せばよいのでしょうか?

    • ベストアンサー
    • PHP
  • 数ページにわたる、引数の渡し方を教えてください。

    数ページにわたる、引数の渡し方を教えてください。 form使用で入力ページがあります(form1.php) form2.phpは入力結果を表示します。 *form1.php <form action="form2.php" method="post"> ■項目aaaa <?php if(isset($_GET['aaaa'])) { $aaaa = $_GET['aaaa']; print("$aaaa"); }else{print ("<a href=\"aaaa.php\">検索する</a>");}?> ■項目bbbb <?php if(isset($_GET['bbbb'])) { $bbbb = $_GET['bbbb']; print("$bbbb"); }else{print ("<a href=\"bbbb.php\">検索する</a>");}?> <input type="submit" name="submit" value="次へ"/> </form> 以下は選択を絞り込む画面です。 *aaaa.php(bbbb.phpも同様) 項目aaaaの絞り込み <ul> <li><a href="form.php?type=<?= urlencode("あいうえお"); ?>">あいうえお</a> <li><a href="form.php?type=<?= urlencode("かきくけこ"); ?>">かきくけこ</a> </ul> これで、form.php→aaaa.php→form.php→bbbb.php→form.phpと移動すると、どうしてもaaaaの項目が消えてしまいます。 上手い方法が浮かばないのでご教授ください。 (なお、form.phpのformタグ使用とaaaa.phpのリンク型は変更できません。)

    • ベストアンサー
    • PHP
  • headerで飛ばすときにURLエンコードを有効に

    headerでほかのサイトに飛ばすとき、 header("Location: http://localhost/nani/success.php?tour=$_GET[tour]"); こんな感じでクエリを飛ばしているのですが、URLエンコーディングをする方法がわかりません。 ほかの変数($data)に入れるまえにurlencode($_GET[tour])として入れ替えて、 ?tour=$_GET[tour]の部分を?tour=$dataとしたのですができません。 ご存知の方いらっしゃいましたら教えていただけませんでしょうか?

    • ベストアンサー
    • PHP
  • キーワードの再検索で

    index.phpからキーワードを書きだし、search.phpで$_GETで受け取り→エンコード→ リクエストURLまでセットし、表示されるまでは問題ないのですが、ソート順を変更した際にリクエストURLに2回、キーワードが入ってしまいます。ブラウザのアドレスバーをみると、エンコードされた値(%e3%81%bf%e3%81%8b%e3%82%93(みかんみかん)と言う感じにが2回入ってしまいます。それを、ソートを変更しても、キーワードを1回だけ入れるには、どのようにしたらいいのでしょうか? [index.php] <p><a href="search.php?keyword=みかん&sort=standard">みかん</a></p> [search.php] <?php $base = 'http://xxx.xxxxxx.co.jp/xxx/xxx'; $keyword =$_GET["keyword"]; $keyword = urlencode($keyword); $sort = $_GET["sort"]; $sort = urlencode($sort); // リクエストURL $url = $base ."&keyword=".$keyword."&sort=".$sort. ; ?> 表示順序 <form action="<?=$_SERVER["PHP_SELF"]?>" method="get"> </select> <input type="hidden" name="keyword" value="<?php print(htmlspecialchars($keyword, ENT_QUOTES)); ?>"> <select name="sort"> <option value="satandard">新着</option> <option value="itemPrice">安い</option> <input type="submit" value="検索"> </select> よろしくお願いいたします。

    • 締切済み
    • PHP
  • GETメソッドで文字列として+を送信したい

    test.php <?php $id=$_GET["id"]; echo $id; ?> として、同ディレクトリ中のindex.html内にある、 <a href="./test.php?id=+あいうえお -かきくけこ +さしすせそ ">リンク</a> をクリックすると、test.phpでは 「あいうえお -かきくけこ さしすせそ」 と表示されてしまいます。 半角の+も文字列としてGETメソッドで一緒に送りたいのですが、この場合、a要素にはどのようなURLを記せばいいのでしょうか。

    • ベストアンサー
    • PHP
  • エンコードされたURLをGETメソッドで受け取るには?

    ttp://localhost/urltest.php?url=ttp://search.auctions.yahoo.co.jp/jp/search/auc?p=%A5%AC%A5%E4%A5%EB%A5%C9&auccat=0&alocale=0jp&acc=jp 上記のURLで ttp://localhost/urltest.phpの if(isset($_GET['url'])){ $itemsStr = ($_GET['url']); } print $itemsStr; で受け取りたいのですが、 ttp://search.auctions.yahoo.co.jp/jp/search/auc?p= までしか取得できません。 %A5%AC%A5%E4%A5%EB%A5%C9 の部分が取り出せないようです。%Aだけを受けとることはできるのですが、それ以上長くエンコードされた文字を受け取ろうとすると ttp://search.auctions.yahoo.co.jp/jp/search/auc?p= までしか受け取れません。 他のエンコードを含んだURLも同様でした。 記述したURLは頭のhを取っているので注意してください。省略されてしまうので。 php5.1.4です。 どなたか御存じの方いらっしゃいましたらご教授お願いします。

    • ベストアンサー
    • PHP
  • PHPのエンコードは特殊?

    $a="あ"; これを%E3%81%82とエンコードしたいのですが、 $b=urlencode($a); echo $b; とすると、%82%A0と出てきます。 %E3%81%82と表示させるにはどのように記述するのでしょうか? FLASHを少しかじっていてAS2ではescapeで対応できるので、 PHPのエンコードが変なのでしょうか。 分かる方いましたらご教授をお願いいたします。

    • ベストアンサー
    • PHP
  • 【PHP】ファイル名を取得して拡張子変更で実行

    sample.phpというphpファイル内で、同ディレクトリにあるsample.txtを読みこませたいのですが、上手くいきません。 <?php $bn = basename($_SERVER['PHP_SELF'], ".php"); ?> で$bnに、sampleという名前を取得させるところまではできましたが <?php require($bn.txt); ?> という式では上手くいかないのです…。 <a href="<?php print $bn ?>.txt">リンク名</a>は成功したので、おしいところまで行ってるのではないかと思うのですが。 ファイル名を取得して任意の拡張子をくっつけて実行するような数式がありましたら教えてください。よろしくお願いします。

  • GETクエリを含むリンクを張るとき・・・

    GETクエリを含むリンク張ったらW3CのValidatorに怒られました。 ”general entity "type" not defined and no default entity” とのことです。 &type=~ というクエリを含むので、&が実体参照の始まりとみなされてしまうようです。 これはどう修正すべきでしょうか。 <a href="URI">にGETクエリを含むURIを用いるのが文法違反なのでしょうか。

  • PHP ハイパーリンクのエンコードについて

    PHP ハイパーリンクのエンコードするには、どうしたらいいのでしょうか? <?php $jew = $path."brand/brand.php?keyword=" . urlencode("マグロ").."&sort=".standard;?> <a href="<?= $jew ?>">魚</a> 下記のサイトも参考にしたのですが、日本語がそのまま返ってきてしまいます。 http://nyx.pu1.net/practice/external_var/external_var3.php http://namidameweb.blog62.fc2.com/blog-entry-231.html

    • ベストアンサー
    • PHP