フォーム送信とURLエンコードについて

このQ&Aのポイント
  • フォーム送信とURLエンコードについて、初心者の方への解説
  • GETメソッドを使用したフォーム送信で日本語をエンコードする方法について
  • 検索結果のアドレス欄にURLエンコードされた文字列を表示させる方法について
回答を見る
  • ベストアンサー

フォーム送信とURLエンコードについて

CGI&PHP初心者です。 フォームのデータ送信とURLエンコードについて、お尋ねします。 method="GET" のフォームで、検索フォームをつくりたいとおもっています。 日本語も含めた検索語をフォーム送信したいと考えていますが、 送信の結果、エンコードされずにそのままブラウザのURL欄に入力した日本語が表示されてしまいます。 (ただ、メモ帳などにURLをコピーペーストするとURLエンコードがされているようです。) googleでは検索結果のアドレス欄にURLエンコードされた文字列がでているが、 同じように検索結果のアドレス欄にはURLエンコードされた文字列をだしたい。 URLに日本語をださずにURLエンコードさせた文字列を表示させるには、 どうすればいいのでしょうか? 補足:できるかぎり検索処理が重くならないにしたいと思います。     開発環境PHP&MySQL     動作環境Chrome のバージョン 38.0

  • CGI
  • 回答数2
  • ありがとう数22

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

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

これはブラウザの機能です。 フォームで入力された文字は、URLエンコードされた状態でサーバーに送信され、サーバーはそれを元の文字列に戻して処理し、その結果を表示しますが、URL欄には ・firefoxは元の文字 ・IEはエンコードされたもの ・Chromeはエンコードされたもの ・Operaは表示されない ・Safariは元の文字  これは当然でしてURL欄には送信した時点のURLが表示され、それをどのように表示するかはブラウザ開発側のスタンスによります。  URLエンコードされた文字よりは本来のキーワードが表示されるほうが便利だと思いますが???  PATH_INFOを使用するWikiなどでは実感されるかと ブラウザ - Wikipedia( http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6 )  どうせ、Ctrl + L → Ctrl + C でコピーすればよいし、firefoxならMaikeLinkアドオン使うし・・ ※方法はあります。  一旦、redirectするページを表示させてから、本来のページにリダイレクトさせる。その場合もブラウザの機能で元の文字列に返すことがあるかも

hide_momiji
質問者

お礼

ありがとうございました。返事がおそくなり申し訳ありません。 とても参考になりました。

その他の回答 (1)

  • YkazubonY
  • ベストアンサー率30% (26/86)
回答No.2

PHPだと、 $mess1 = rawurlencode('下痢腹晋ちゃんまたも途中退陣'); が使えます。

関連するQ&A

  • 日本語をGETで渡す場合URLエンコードは必要?

    下記の例のように全角文字をaタグのGETメソッドでPHPに渡し、その全角文字で検索した 結果を表示するスクリプトを製作中なのですが、 日本語内に空白等もないですし、あらかじめ検索する語が決まっているので ブラウザはIE9とFIREFOX9.0.1で試しましたが両方とも文字化けすることなくOKでした。 このスクリプトを万人向けに公開する場合、URLエンコード必要なのでしょうか? 例: <a href="http://hoge.php?word=日本語">日本語</a>

    • ベストアンサー
    • PHP
  • PHP5でメール送信フォームのURLを分らなくする

    PHP5でメール送信フォームのURLを分らなくする PHP5でメール送信フォームを作っています。 開発環境:Win7,Achache2 このファイルをファイル名、URLが分らなくする方法がわかりません。 例: http://kohhi.com/search?q=PHP%E3%80%8AB&src=IE-SearchBox&FORM=IE8SRC どのような仕組みで上記のような事ができるのでしょうか。 PHP、セキュアファイルで検索してもうまく検索できません。 サンプルプログラムなど、サイトを教えてくれるだけでも幸いです。

    • ベストアンサー
    • PHP
  • URLの文字列をエンコードして表示させたい。

    IISでウェブサーバを立てて日本語のフォルダを参照できるようにしているのですがURLの文字列をコピーしてメールに貼り付けた時にリンクさせたい為、URLの日本語の文字列の部分をエンコードさせたいのですが何か良い方法はありませんか?

  • シフトJISでURLエンコード

    IEのJavaScriptのescapeで日本語をURLエンコードすると、UnicodeでURLエンコードしてしまいますが、シフトJISのままURLエンコードする方法はないのでしょうか? 文字列のシフトJISコードを取得する方法でも良いのですが・・・。 まったく、Unicodeなんて役に立たないものを無理矢理標準にしようとしないで欲しいナ!>MS

  • ■URLのエンコードについて

    ■URLのエンコードについて お世話になります。 ■URLのエンコードについて 下記PHPで書いてありますが、google、Firefoxでは正しく移動(表示)できますが IEでは正しく表示できません。 $body .= "<A href='search.php?maker=$col[maker]'>" . substr($col[maker], 0, 50) ."</A> " . "($col[cnt]件)"; 文字コードはEUC-JPですが IEでもできるように教えていただけないでしょうか? 大変困っております。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 携帯電話の絵文字とURLエンコード/デコードについて

    携帯電話の絵文字とURLエンコード/デコードについて Java・シェルスクリプトによるCGIとPHPを用いた 携帯電話向けのウェブアプリを開発しています。 アプリの内容としては、PHP側で生成したHTMLのフォームから ユーザーに入力してもらった文字列を引数としてJava側に渡し、 Java側で値を受け取ってから、文字列変換処理を行うものです。 この際の、携帯電話特有の絵文字の取り扱いについてつまずいています。 PHPとPHPとの間の場合は、フォームから送られるパラメータが 絵文字を含んでいたとしても、特に何の問題なく絵文字パラメータの 入力・送信(<input type="text" name="hoge" value="EMOJI">)・ 受信・表示(echo $_REQUEST['hoge']; で EMOJI を表示する)ができていたのですが、 フォームから送られるURLエンコードされたクエリー文字列を Java側で引数として受け取り、もとの文字列に戻すためにURLデコードの処理をかけると、 携帯電話で入力した絵文字の部分だけ文字化けしてしまいます。 (現在確認の取れているのは、ドコモの絵文字とauの絵文字が「 ? 」 (半角のクエスチョンマーク)に化けてしまう事態です) PHPどうしの間でフォームによってPOSTやGETで送受信される際も 入力された値がいったんURLエンコードされてから HTTPリクエストに乗ることは間違いないと思うので、 Java側のURLデコーダーの問題かと思われるのですが (たとえば、未知の範囲のバイナリはすべて例外として ? にしてしまう、など)、 どなたか解決策等をご存じないでしょうか。 ちなみに現状、絵文字以外の通常の文字列に関しては目立った問題はなく 受信、変換処理、表示等ができている段階なので、 最後の最後に絵文字の問題だけが残ってしまい、困っています。 よろしければ、ご教唆のほど、よろしくお願い申し上げます。 参考までに、開発環境は以下の通りです。 ・Windows XP SP3 + Eclipse Build id: 20100218-1602(ローカル開発環境) ・Cent OS 5.3(アプリ実行用VPSサーバー) ・Sun JDK SE: 1.6.0_20 (開発用Windowsマシン・アプリ実行用サーバともに同じバージョン) ・使用言語および文字コード  Java、PHP、日本語、Shift_JIS(携帯電話のうち、ドコモがShift_JISを標準とするため) ・URLデコーダーに使っているパッケージ・クラス  org.apache.commons.codec.net.URLCodec の decode()メソッド (Shift_JISの場合、java.net.URLDecoder は java.net.URLEncoderでエンコードしたものしか正常にデコードできないため) (参考: http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25659&forum=12 ) ( http://commons.apache.org/codec/download_codec.cgi )

    • ベストアンサー
    • Java
  • 掲示板に携帯から書き込むとURLエンコード

    PHPを使って掲示板を作成しています。 UTF-8でPHPファイルを作成し、UTF-8のテキストファイルにログをためていく感じで作っています。 PCでは、だいたい正常に動くようになったのですが、携帯電話(au/W61S)からの投稿を試してみたところ、投稿結果がURLエンコードの状態になってしまいました。。。 %82%c6%82%a4%82%b1%82%a4%82%c4%82%b7%82%c6 さらにシフトJISでエンコードされているようでしたので、自分のつたない知識を総動員して、以下のような処理をさせることでなんとか形にはなったのですが、かなり処理としては乱暴な気がしています。 携帯電話からの投稿というのは、URLエンコードとして受け取るしかないのでしょうか(auでしか試していないため、他のキャリアだと別の問題が発生するのでしょうか?) また、下記の方法よりももっとスマートに携帯からの投稿を、表示できる文字列に変換する方法をご存じの方がいらっしゃいましたら、ご教授いただければ幸いです。 よろしくお願いいたします。 <?php //フォーム内に入力された文字列を取得 $test = $_GET['formtxt']; //先頭の文字を抽出 $firsttxt = substr($test,0,1); //先頭の文字列が%であれば、URLデコードを行い、シフトJISからUTF-8に変換する if($firsttxt == "%"){ $test = urldecode($test); $test = mb_convert_encoding($test,'UTF-8','SJIS'); } ?>

    • 締切済み
    • PHP
  • URLで何文字送れます?

    URLのあとに変数をつけて文字列など送ることが出来ますが 何文字までURLにのせておくることが出来るのでしょうか? 普通に試した場合かなりな量送れたのですが、正確な送信可能文字数などあれば知っておきたいと思っています。 またOKWEBなどの入力フォームもやはりURLでエンコードして送っているのでしょうか?

    • 締切済み
    • PHP
  • URLエンコードされなかったパラメータを受け取る方

    Apacheのアクセスログに、URLエンコードされていない変数が正しく書き込まれているのですが、 PHPでがURLエンコードされていない変数が受け取れませんでした。 URLエンコードされずに送信されたデータはPHPでは受け取れないのでしょうか?

    • ベストアンサー
    • PHP
  • URLエンコードについて

    「 † 」 の文字をUTF-8 でURLエンコードした時の値が2種類あるんでしょうか。 以下の2つのURLエンコードした文字を %EF%BC%8D %E2%80%A0 URLエンコード/ デコードの結果を出力してくれる こちらのサイトと https://www.tagindex.com/tool/url.html こちらのサイト https://tech-unlimited.com/urlencode.html で結果が異なるみたいです。 なぜこういった結果が異なる状況が生まれるのでしょうか そして正しいのはどちらなのでしょうか

専門家に質問してみよう