0

通过 $_POST 将第 1 页的登录信息(电子邮件地址)发送到第 2 页,以便处理诸如 jim_o'brien@thing.com 之类的地址。

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

实际上,原始问题是有效的。这是我在大约五分钟内编写的一些代码。它不漂亮,也不复杂,但它说明了这一点。

 <?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 回答
0

查看页面的源代码以查看,实际上它工作正常 - 在您的浏览器中您会看到“'”,因为您的浏览器使其“人性化”,但在查看源代码后您会看到,一切都很好。

以其他方式尝试:

echo htmlentities("jim_o'brien@thing.com", ENT_QUOTES);
于 2012-10-26T23:43:59.827 回答
-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 回答