PHP和HTML的字符问题

时间:2011-06-20 09:28:09

标签: php html

我有一个类似

的变量

$ name = '18“液晶电视';

当我尝试在HTML输入中使用它时,它不显示“

之后的字符

我该怎么办?

3 个答案:

答案 0 :(得分:4)

使用htmlentitieshtmlspecialchars

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实体中。请参阅htmlspecialcharshtmlentities

附录:这背后的基本原理是防止SQL注入或Shell代码执行的相同概念:“过滤器输入,转义输出”。每种媒体都有特殊字符,您无法在该媒体中正常输出。对于XML / HTML,它们是',',&lt;,&gt;和&amp;。对于SQL,它们是',',\,\ 0等等。而对于Shell来说,它们是;,',',`,$还有更多。每次你向数据库启动一个查询,在你的html中输出一些内容或者通过php在你的服务器上执行一些命令时,你需要这个对于每种媒体,PHP都有自己的预防功能:

  • SQL:mysql_real_escape_stringmysqli_real_escape_stringpdo_quotepg_escape_string或准备好的陈述。
  • HTML:htmlentitieshtmlspecialchars
  • 外壳:escapeshellcmdescapeshellarg

答案 2 :(得分:1)

当您在HTML中输出特殊字符(& ' " < >)时,您需要转义它们,1方法是这样做的:

$name = htmlentities(' 18 " LCD TV ');