0

jim_o'brien@thing.com のようなアドレスを処理するために、$_POST を介してページ 1 からページ 2 にログイン (電子メール アドレス) を送信します。

echo "<input type='hidden' name='login' value='".htmlspecialchars($_GET['login'], ENT_QUOTES)."'>"

ページ 2 のソース コードを見ると、期待どおりに出力されていないjim_o'brien@thing.comことに驚いていますjim_o&#039;brien@thing.com

データを新しいページ (ページ 3) に再度送信するときに、ログインを再びhtmlspecialchars($_GET['login'], ENT_QUOTES)... にラップすると、期待どおりの結果が得られます。

#039;しかし、POST送信でエンコーディングが失われる理由を誰かが説明できますか? ブラウザーで一重引用符がエコーされることは理解できますが、ソース コードでもエコーされるのはなぜですか?

ありがとう

4

3 に答える 3

0

ページのソースを見て、実際には問題なく動作していることを確認してください。ブラウザでは「'」が表示されます。これは、ブラウザが「人間に適した」ものにするためですが、ソースを確認すると、すべてが正常であることがわかります。

他の方法で試してください:

echo htmlentities("jim_o'brien@thing.com", ENT_QUOTES);
于 2012-10-26T23:43:59.827 に答える
0

実際、元の質問は有効です。以下は、私が約 5 分でハッキングしたコードです。きれいではありませんし、複雑でもありませんが、要点はわかります。

 <?php
 $posted=$_POST[posted];
 if (isset($posted)) {
 echo "POSTED: $posted<br>"; //output: You'll see a quote
 $specposted=preg_replace('/&#039/','****',$posted);
 echo "after entity replace: $specposted<br>"; //output: You'll see a quote
 }
 else{
 $phraseone="You'll see a quote";
 $phrasetest=htmlentities($phraseone, ENT_QUOTES);
 echo "phrasetest: $phrasetest<br>"; //output: You'll see a quote
 $specialphrase=preg_replace('/&#039/','****',$phrasetest); 
 echo "after entity replace: $specialphrase<br>"; //output: You****;ll see a quote
 print<<<HERE
 <form method='post'>
 <input type='hidden' name='posted' value='$phrasetest'>
 <input type='submit' value='GO!'>
 </form>
 HERE;
 }
 ?>

面白い...

于 2014-10-23T06:52:20.960 に答える
-1

jim_o'brien@thing.comは有効なメール アドレスではないため、許可できません。

検証には filter_input を使用します。

$login = filter_input(INPUT_GET, 'login', FILTER_VALIDATE_EMAIL); //or INPUT_POST, if method is POST
if(!$login){
   //invalid e-mail 
}

参照: http://www.w3schools.com/php/func_filter_input.asp

于 2012-10-26T23:32:41.780 に答える