PHPのGETとPOSTの処理における日本語の変換について
- PHPのGETとPOSTの処理を学習中なのですが、valueに日本語が入力されていた場合の処理について分からない点があります。
- ブラウザのアドレスバーには"%0D%0"というURLエンコードされた文字列が表示されていますが、PHPのソース上ではしっかりと日本語として表示されています。
- 具体的にどこでURLエンコードされた文字列が再び日本語に変換されているのか分かっていません。ご教授いただけますと幸いです。
- ベストアンサー
PHPのGETとPOSTの処理を学習中なのですが、valueに日本語が
PHPのGETとPOSTの処理を学習中なのですが、valueに日本語が入力されていた場合の処理について分からない点があります。 POSTやGETから送信された日本語の値がどの時点で再び日本語に変換されているのかということです。 たとえば以下のようなphpファイルにブラウザからアクセスした場合、 <?php $static = $_GET["static"]; print $static; ?> <form method="GET"> <textarea name="static"> 静的 </textarea> <input type="submit" name="submit_button" value=" 送 信 " /> </form> ブラウザのアドレスバーには"?static=静的%0D%0A&submit_button=+送+信+"という文字列が表示されています。 この"%0D%0"というのは、URLエンコードされた文字列らしいのですが、上記のphpファイル上の"print $static;"部分の表示ではしっかりと日本語として表示されています。 私は上記のソース上のどこの部分でURLエンコードされた文字列が再び日本語として表示されるよう変換されているか分かりません。 何卒ご教授頂けますようお願い致します。
- loveone6
- お礼率57% (4/7)
- PHP
- 回答数2
- ありがとう数8
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
よくある質問の中に、同じような疑問に対する答えがあります。 裏を返せば、ブラウザを通さずデータをやり取りする場合、その作業はスクリプト製作者に任されるということです。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
>ブラウザのアドレスバーには"?static=静的%0D%0A・・・ 「%0D%0A」はwindowsの改行マークですね 「静的」と日本語がブラウザで表示されているようにみえますが 実際にサーバーに送られているデータはエンコードされたものに なっているはずです。(ブラウザが見やすくしてくれてるだけ) そのURLを一度ブックマークしてみて、その詳細をみれば わかると思います。 >URLエンコードされた文字列が再び日本語として表示されるよう変換されているか エンコードされたデータはサーバーで参照される際に自動で デコード評価されます。
お礼
回答ありがとうございます。 ご指摘の通り、私がエンコードされたと考えていた文字列は改行マークだったようです。 教えていただいたとおり、ブックマークしてURLを閲覧したところ、アドレスバーに表示されたものよりも遙かに長い、日本語 がエンコードされた文字列が含まれていました。 その後は、サーバーがphpによってデコードしているという解釈で良いでしょうか。
関連するQ&A
- postやgetで得られたパラメタのエンコードを変換したい
Phpの内部エンコードとhtmlの表示文字コードが異なる場合、 そのformから送られる変数をphpで受けた場合、当然文字化けしてしまいます。 これを回避したいので、 $_POST や $_GET の文字列のエンコードを変換したいのですが(変数名の予想はできない) 受ける変数の文字コードを指定する方法が分かりません。 ご存知の方はご教授お願いいたします。
- ベストアンサー
- PHP
- php post
phpで質問です。 ページ1でユーザーにフォームから入力されたページをページ2でサニタイズをし確認のため表示しページ3でページ 1に入力された値をそのままdbに入れたいのですが、どうすればページ1で受け取ったデータを2.3に送信できますか?ページ2では確認のため表示したあとに登録か修正か尋ねるフォーム(登録がのname='add')のようにしています。 ページ2の 確認フォーム<form action="3.php" method="post"> <button type="submit" name="remove" class="pre">修正</button> <button type="submit" name="add" value="true" class="button">登録</button> </form>
- ベストアンサー
- PHP
- PHPです。日本語はどのようにしたらつかえるのでしょうか
英語では期待通り動くのですが、日本語では期待通り動きません。 なぜですか。 form.html <html> <head>フォーム</head> <body> <form action="henkan.php" method="post"> 文章<input type="text" name="UKETORI"><br> <input type="submit" value="送信"><br> </form> </body> </html> henkan.php <html> <body> <?php $uketori=$_POST['UKETORI']; $uketori=str_replace("です。","だよん。", $uketori); print "$uketori"; ?> </body> </html> 日本語を変換したい場合はエンコードとか必要なのでしょうか。 やり方がわかりません。宜しくお願いいたします。
- ベストアンサー
- PHP
- 画像処理での文字の処理について
formのtextareaから文字を受け取り、その文字を画像に書き込むプログラムを作成しています。 処理手順は、 1.[a.php]にあるtextareaに文字を入力 <textarea name="intxt" rows="10" cols="30"></textarea> (FORMのmethodはPOST) 2.submitで値を送信し、[b.php]で処理 [a.php]:print "<img border='0' src='b.php?imgfile=$imgfile&txt=$txt'>"; [b.php]:$imgfile=$_GET['imgfile'];/*画像*/ $txt=$_GET['txt']; /*入力文字*/ 文字を画像に書き込むときに、 aaa bbb という風に画像に書き込みたいのですが、処理をすると aaabbb となります。 そこで私が考えた方法は、改行コードで文字列を切り取り、【 $text=explode("\n",$txt); 】 for文で書き込むという方法でしているのですが、うまく文字列を切り取れません。 改行コードが間違っているのでしょうか? それとも、改行コードでは切り取れないのでしょうか? 検索をかけてみたり、他の質問を見てみたのですが、うまく出来ませんでした。 それと、日本語で文字列を渡すためにはどのような関数を使えばよいのでしょうか? マルチバイト文字列はrawurlencode()を噛まさねば渡すことが出来ないというのはわかったのですが、 どういう風に噛ませるのかわかりません。 いろいろと試したのですが、表示されませんでした。 他にも方法があるのでしょうか? 開発環境は、PHP5.2.5、Apache2.2、WindowsXPです。 よろしくお願いします。
- ベストアンサー
- PHP
- 日本語をGETで渡す場合URLエンコードは必要?
下記の例のように全角文字をaタグのGETメソッドでPHPに渡し、その全角文字で検索した 結果を表示するスクリプトを製作中なのですが、 日本語内に空白等もないですし、あらかじめ検索する語が決まっているので ブラウザはIE9とFIREFOX9.0.1で試しましたが両方とも文字化けすることなくOKでした。 このスクリプトを万人向けに公開する場合、URLエンコード必要なのでしょうか? 例: <a href="http://hoge.php?word=日本語">日本語</a>
- ベストアンサー
- PHP
- GETとPOSTを同時利用したい
wordpressで下記のようにPOSTを使用して遷移先のメールフォームにデータを渡しています。 コードの作成は(http://blog.goo.ne.jp/xmldtp/e/0884dbe92721ab84cb27d212ca631094)を参考にしました。 <a href="" onclick="document.mail_form.submit();return false;" > <img src="@@@.png" alt="お問い合わせフォーム"> </a> <form action="<?php echo get_permalink( @@@ ); ?>" method='post' name="mail_form" target="_blank"> <input type='hidden' name='post_id' value="<?php echo $post->ID; ?>"> </form> これをそのまま流用し、<form>内の遷移先URLに『?view=english』を追加して英語版での表示切替をしようとしたのですが、これをつけるとPOSTの情報が遷移先に渡らなくなりました。 <form action="<?php echo get_permalink( @@@ ); ?>?view=english" method='post' name="mail_form" target="_blank"> <input type='hidden' name='post_id' value="<?php echo $post->ID; ?>"> </form> どのようにすればPOSTの内容を維持したまま遷移先URLにGETの文字列を追加させることができますか?
- ベストアンサー
- PHP
- POST送信かGET送信か
------------------------------------------ <SCRIPT language="JavaScript"><!-- function GoPage(url, id){ document.form.action = url; document.form.id.value = id; document.form.submit(true) } // --></script> <!--中略--> <input type="submit" name="submit" value="送信" onClick="javascript:GoPage("a.php", "1")"> ------------------------------------------ 上記のような処理を書いた場合、 遷移先である a.php で id(値:1)を取得する時は POSTで受け取るのですか?それともGETでしょうか?
- ベストアンサー
- JavaScript
- POSTとGETを利用しようと
サブミットのときにはgomiのデータが$_POST['gomi']にセットされキャンセルのときにはgomiのデータが$_GET['gomi']にセットされるようにしたいのですが x.html: <form action="x.php" method="post"> <input type="text" name="gomi"/> <input type="submit" value="set"/> </form> <p><a href="x.php">cancel</a></p> ではもちろんcancelをクリックしても$_GET['gomi']にgomiのデータがセットされません どうしたらできるでしょうか?
- ベストアンサー
- PHP
- phpのsubmit処理について
phpのsubmit処理について不明点があります 実装したいことは ボタンを押したらフォームの入力内容を別フォームに表示したいのですが 別フォームに呼び出しはできたのですが ボタン押下時にsubmitで表示するかの確認をしたいです 現段階ではボタンを押すと確認アラートも出ず、ただ別フォームが表示される形になってしまいます <--関数--> function showData(){ myRet = confirm("表示しますか") if (myRet == true){ } } <--form--> <form name = "FileData" action = "show.php" method="POST"> <--button--> <input type = "submit" name ="Display" onClick "showData();" value="表示"> ソースの抜粋になります これで実行するとshow.phpが呼ばれて表示はされるのですが関数が呼ばれず確認アラートも呼ばれません すぐ実行されるというものになっていますます この現象の原因と何か解決などわかることがあればよろしくお願いします。
- ベストアンサー
- PHP
- escape関数を使ってgetでsubmit
お世話になります。 javascriptを使ってgetでsubmitしております。 getなので日本語などはそのままURLへ渡してしまいます。 javascriptのescape関数を使うとエンコードしてくれますが、 使い方が分かりません。 下記ソースにescape関数を用い、 エンコードしてURLへsubmitしたいのです。 宜しくお願いします。 function submit_pg() { document.form1.action='#'; document.form1.method='GET'; document.form1.submit(); }
- 締切済み
- JavaScript
お礼
回答ありがとうございます。 ブラウザを通さない場合はエンコードもPHPでやらなければならないということですね。 教えていただいたURLの中に質問に対する回答が完全に掲載されいて、疑問が解けました。 " フォームの内容を送信するとき、GET か POST かにかかわらず data は ブラウザによって URL エンコードされ、PHP によって URL デコードされます。 要は、URL エンコード/デコードを自分で行う必要はなく、これらの処理は すべて自動的に行われると言うことです。" http://www.php.net/manual/ja/faq.html.php 大変勉強になりました。ありがとうございます。