Php htmlspecialchars在$\u POST中的输出
通过$u POST将登录名(电子邮件地址)从第1页发送到第2页,以便处理jim_o'brien@thing.com.Php htmlspecialchars在$\u POST中的输出,php,htmlspecialchars,Php,Htmlspecialchars,通过$u POST将登录名(电子邮件地址)从第1页发送到第2页,以便处理jim_o'brien@thing.com. echo”“ 查看第2页的源代码,我看到它输出了jim_o'brien@thing.com而不是jim#o';brien@thing.com如我所料 I当再次将数据发送到新页面(第3页)时,我会将登录再次包装到htmlspecialchars($\u GET['login'],ENT\u QUOTES)。。。它做了我期望它做的事 但有人能解释为什么它会丢失它的#039编码
echo”“
查看第2页的源代码,我看到它输出了jim_o'brien@thing.com
而不是jim#o';brien@thing.com
如我所料
I当再次将数据发送到新页面(第3页)时,我会将登录再次包装到htmlspecialchars($\u GET['login'],ENT\u QUOTES)
。。。它做了我期望它做的事
但有人能解释为什么它会丢失它的#039在POST发送中编码>编码?我可以理解它在浏览器中重复一个引号,但为什么它也在源代码中重复
谢谢你,吉姆brien@thing.com
不是有效的电子邮件地址,不允许使用
使用过滤器输入进行验证
$login = filter_input(INPUT_GET, 'login', FILTER_VALIDATE_EMAIL); //or INPUT_POST, if method is POST
if(!$login){
//invalid e-mail
}
参考资料:查看页面的源代码,事实上它运行良好-在浏览器中,您会看到“”,因为您的浏览器使其“人性化”,但在查看源代码后,您会看到,一切都很好 换言之,请尝试:
echo htmlentities("jim_o'brien@thing.com", ENT_QUOTES);
事实上,原来的问题是正确的。这是我在大约五分钟内破解的一些代码。它不漂亮,也不复杂,但它说明了问题的关键
<?php
$posted=$_POST[posted];
if (isset($posted)) {
echo "POSTED: $posted<br>"; //output: You'll see a quote
$specposted=preg_replace('/'/','****',$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('/'/','****',$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;
}
?>
你为什么说那不是一个有效的电子邮件地址?它是有效的。包含单引号的邮件地址是有效的,即使Gmail,Yahoo,Hotmail…等拒绝它们。就验证而言,我使用正则表达式。但我的问题是关于通过POST的htmlspecialchars的输出。无论如何,谢谢。生活和学习。。。我真的不知道。我一直认为只允许字母、数字、破折号和下划线。谢谢(:htmlentities给出了相同的结果。但您的答案必须是正确的。浏览器使其可读。谢谢。抱歉,源代码不会因为$u POST发送而输出\039;
,而是我第一次说的一个引用。我仍然想知道原因。回应htmlspecialchars(“