在html元素的属性中通过php打印特殊字符

时间:2015-08-20 12:13:25

标签: php html escaping

假设$string = AX èdfdfdèsèdsè'/\"(实际上,$string从数据库中分配了此值)

所以当我打印以下内容时,

echo "<option value='". htmlspecialchars($string) ."'>".$string."</option>";

我得到了输出,

<option \&quot;'="" value="AX èdfdfdèsèdsè">AX èdfdfdèsèdsè'/\"</option>

我怎样才能正确地逃避这一点,以便我不会创造另一个无用的属性&amp;而是获得与$string中相同的值?

另外,Php没有逃脱$string整体的原因是什么?

3 个答案:

答案 0 :(得分:1)

另一个答案是使用htmlspecialchars($value,ENT_QUOTES)所以基本上就是

echo "<option value='". htmlspecialchars($value,ENT_QUOTES)."'>".($value)."</option>";

除非明确设置htmlspecialchars($value)标志,否则默认情况下htmlentities($value)'都不会转换单引号ENT_QUOTES

答案 1 :(得分:0)

你应该在第二次使用$ string时使用htmlspecialchars,以防止使用&#34;&lt;&#34;来破坏html。在期权价值报价的内部,替换单引号就足够了:

echo "<option value='".str_replace("'","&#039;",$string)."'>".htmlspecialchars($string)."</option>";

输出是:

<option value='AX èdfdfdèsèdsè&#039;/\"'>AX èdfdfdèsèdsè'/\&quot;</option>

答案 2 :(得分:0)

echo '<option value="', htmlspecialchars($string), '">', htmlspecialchars($string), '</option>';

除非您告诉PHP,否则PHP不会逃脱任何内容。 ;)