在文本输入的value属性中使用htmlspecialchars

时间:2012-07-12 18:59:31

标签: php attributes escaping quotes htmlspecialchars

我的问题类似于this问题,但我没有使用代码点火器。我将从数据库获取的变量回显到文本输入的value属性。变量可能包含'或'或任何其他特殊字符。

我试过了:

<input type="text" name="myTextInput" value="<?= htmlspecialchars($dbValue, ENT_QUOTES); ?>" />

但它会将引号输出为&quot;&#039;,这不是我想要的。我希望文本输入实际包含用户输入的引号。

我应该使用php函数还是javascript函数来转义字符串?如果我不逃避它我得到一个javascript错误,因为$ dbValue字符串中的引号与值属性引号交互。

4 个答案:

答案 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 &quot;Dead Pirate&quot; Jones

可以毫无问题地插入<input>字段。

如果输入字段的值包含用户可见的文字&quot;,那么您将进行一些双重编码。

答案 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 &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; 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