我们有这样的代码:
echo '<input type="text" name="myInput" value="Double " Quotes" />';
绝对不行,因为Double
之后的引号结束了该值。
我们可以使用单引号而不是双引号来修复它。
echo '<input type="text" name="myInput" value=\'Double " Quotes\' />';
现在我想使用单引号和双引号作为值。它应输出She said:"I don't know."
有没有办法使用HTML实体(如"
),htmlentities()
或类似的功能没有来修复它?
答案 0 :(得分:9)
有没有办法使用HTML实体(如
"
),htmlentities()
或类似的功能没有来修复它?
不,没有。双引号("
)在HTML属性中具有特殊含义。如果你想把它放入一个属性值,你必须(这不是一个真正的必须,但一个很好的经验法则。如果你使用双引号分隔的属性,你必须像在你的问题中那样)将它写成它的实体"
。没有办法解决它。
实际上即使<tag attr='this"'>
也没有错误的HTML,大多数浏览器都可以处理它。但是它没有帮助你,因为你正在寻找引号 - 单引号和双引号 - 其中一个总是在HTML中是属性值的分隔符 - 如果你需要在属性值中有空格(和你一样)。
然而,不要担心。它有效,你可以用它来表达你喜欢的一切,包括你的引用组合。
实际上PHP就是为了让你能够使用htmlspecialchars
方法为你完成所有工作而“逃避”所有这些角色的负担。在PHP字符串中,你有原始文本 - 你认为合适的单引号和双引号 - 逐字。
$myString = 'She said: "I don\'t know."';
printf('<input type="text" name="myInput" value="%s" />'
, htmlspecialchars($myString));
只是一个缩短的例子,应该证明这是如何工作的。 Online demo
答案 1 :(得分:0)
要解决标题中的问题,在属性值中使用“和”都没有问题。问题出现在值的线性化中,而不是在HTML标记中写入(与在客户端生成它们相反) JavaScript)。然后,如果值包含“和”,则需要对它们中的任何一个进行转义,具体取决于您使用哪个作为值分隔符。
但是,您不需要使用实体引用。也可以使用字符引用"
和'
(或等效的十进制引用)。
对于字符串
她说:“我不知道。”正确的英文拼写是
她说:“我不知道。”使用正确的标点符号,不会出现标记问题,因为您可以使用Ascii引号“或Ascii撇号作为分隔符。它们适用于计算机语言,而不是人类语言。