我有一个类似
的变量$ name = '18“液晶电视';
当我尝试在HTML输入中使用它时,它不显示“
之后的字符我该怎么办?
答案 0 :(得分:4)
使用htmlentities
或htmlspecialchars
:
htmlentities
将执行所有html标记。
htmlspecialchars
将会这样做:
& " ' < >
示例强>
<input type="text" value="<?php echo htmlentities( $text );?>" />
如果你这样做:
<input type="text" value="<?php echo $text;?>" />
它本质上在做:
value="18 " LCD TV"
所以18之后的"
正在关闭值属性
答案 1 :(得分:4)
不使用htmlspecialchars
可能会导致跨站点脚本攻击(搜索XSS)。使用此:
<input type="text" value="<?php echo htmlspecialchars($name, ENT_QUOTES);?>" />
这将是html编码引号,&lt;,&gt;和&amp; simbols在等效的html实体中。请参阅htmlspecialchars
或htmlentities
。
附录:这背后的基本原理是防止SQL注入或Shell代码执行的相同概念:“过滤器输入,转义输出”。每种媒体都有特殊字符,您无法在该媒体中正常输出。对于XML / HTML,它们是',',&lt;,&gt;和&amp;。对于SQL,它们是',',\,\ 0等等。而对于Shell来说,它们是;,',',`,$还有更多。每次你向数据库启动一个查询,在你的html中输出一些内容或者通过php在你的服务器上执行一些命令时,你需要这个对于每种媒体,PHP都有自己的预防功能:
mysql_real_escape_string
,mysqli_real_escape_string
,pdo_quote
,pg_escape_string
或准备好的陈述。htmlentities
,htmlspecialchars
escapeshellcmd
,escapeshellarg
答案 2 :(得分:1)
当您在HTML中输出特殊字符(& ' " < >
)时,您需要转义它们,1方法是这样做的:
$name = htmlentities(' 18 " LCD TV ');