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

Print special characters via php inside a html element's attribute

假设$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>

我怎样才能正确地转义它,这样我就不会创建另一个无用的属性,而是得到与 $string 中相同的值?

还有,请问Php整体没有逃脱$string的原因是什么?

您应该在第二次使用 $string 时使用 htmlspecialchars 以防止用“<”破坏 html。在选项值引号内,替换单引号就足够了:

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

输出为:

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

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

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

似乎 htmlspecialchars($value)htmlentities($value) 都不会默认转换单引号 ' 除非明确设置 ENT_QUOTES 标志。

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

PHP 除非您告诉它,否则不会转义任何内容。 ;)