通过 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 \"'="" value="AX èdfdfdèsèdsè">AX èdfdfdèsèdsè'/\"</option>
我怎样才能正确地转义它,这样我就不会创建另一个无用的属性,而是得到与 $string
中相同的值?
还有,请问Php整体没有逃脱$string
的原因是什么?
您应该在第二次使用 $string 时使用 htmlspecialchars 以防止用“<”破坏 html。在选项值引号内,替换单引号就足够了:
echo "<option value='".str_replace("'","'",$string)."'>".htmlspecialchars($string)."</option>";
输出为:
<option value='AX èdfdfdèsèdsè'/\"'>AX èdfdfdèsèdsè'/\"</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 除非您告诉它,否则不会转义任何内容。 ;)
假设$string = AX èdfdfdèsèdsè'/\"
(实际上,$string
是从数据库中赋值的)
所以当我打印以下内容时,
echo "<option value='". htmlspecialchars($string) ."'>".$string."</option>";
我得到了输出,
<option \"'="" value="AX èdfdfdèsèdsè">AX èdfdfdèsèdsè'/\"</option>
我怎样才能正确地转义它,这样我就不会创建另一个无用的属性,而是得到与 $string
中相同的值?
还有,请问Php整体没有逃脱$string
的原因是什么?
您应该在第二次使用 $string 时使用 htmlspecialchars 以防止用“<”破坏 html。在选项值引号内,替换单引号就足够了:
echo "<option value='".str_replace("'","'",$string)."'>".htmlspecialchars($string)."</option>";
输出为:
<option value='AX èdfdfdèsèdsè'/\"'>AX èdfdfdèsèdsè'/\"</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 除非您告诉它,否则不会转义任何内容。 ;)