我的问题类似于this问题,但我没有使用代码点火器。我将从数据库获取的变量回显到文本输入的value属性。变量可能包含'或'或任何其他特殊字符。
我试过了:
<input type="text" name="myTextInput" value="<?= htmlspecialchars($dbValue, ENT_QUOTES); ?>" />
但它会将引号输出为"
或'
,这不是我想要的。我希望文本输入实际包含用户输入的引号。
我应该使用php函数还是javascript函数来转义字符串?如果我不逃避它我得到一个javascript错误,因为$ dbValue字符串中的引号与值属性引号交互。
答案 0 :(得分:5)
然而,这正是你想要的。 e.g。
如果插入的数据是
Davy "Dead Pirate" Jones
然后你将其插入到输入字段中,最终会得到
<input type="text" name="..." value="Davy "Dead Pirate" Jones" />
将按以下方式解释:
<input> field with attributes:
text -> 'text'
name -> '...'
value -> ' ' (a single space)
Dead ->
Pirate ->
" ? danging quote
Jones ->
" ? -> another dangling quote
通过比较,在做了一个html_entities之后,你就有了
Davy "Dead Pirate" Jones
可以毫无问题地插入<input>
字段。
如果输入字段的值包含用户可见的文字"
,那么您将进行一些双重编码。
答案 1 :(得分:3)
您需要使用html_entity_decode
。以下是文档的示例:
<?php
$orig = "I'll \"walk\" the <b>dog</b> now";
$a = htmlentities($orig);
$b = html_entity_decode($a);
echo $a; // I'll "walk" the <b>dog</b> now
echo $b; // I'll "walk" the <b>dog</b> now
?>
参考:http://www.php.net/manual/en/function.html-entity-decode.php
答案 2 :(得分:2)
您正在寻找与htmlspecialchars相反的内容,请尝试使用html_entity_decode。
以下是使用html_entity_decode
的代码。
<input type="text" name="myTextInput" value="<?= html_entity_decode($dbValue, ENT_QUOTES); ?>" />
以下是手册的链接 - &gt; http://www.php.net/manual/en/function.html-entity-decode.php
如果您在使用此功能时遇到任何问题,可能需要查看此问题,该问题存在常见的编码问题 - &gt; https://stackoverflow.com/a/4638621/1065786
答案 3 :(得分:0)
要将单引号,双引号和html标记显示为文本字段值,请尝试使用:
<?php
$formVal = htmlspecialchars($dbValue, ENT_COMPAT, 'utf-8');
// or this:
// $formVal = htmlspecialchars($dbValue);
?>
<!-- html -->
<form>
<input type="text" name="myTextInput" value="<?php echo $formVal; ?>" />
</form>
http://www.sitepoint.com/form-validation-with-php
https://www.inanimatt.com/php-output-escaping.html