单引号和双引号一起作为HTML属性值?

时间:2013-09-07 20:54:53

标签: php html

我们有这样的代码:

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实体(如&quot;),htmlentities()或类似的功能没有来修复它?

2 个答案:

答案 0 :(得分:9)

  

有没有办法使用HTML实体(如&quot;),htmlentities()或类似的功能没有来修复它?

不,没有。双引号(")在HTML属性中具有特殊含义。如果你想把它放入一个属性值,你必须(这不是一个真正的必须,但一个很好的经验法则。如果你使用双引号分隔的属性,你必须像在你的问题中那样)将它写成它的实体&quot;。没有办法解决它。

实际上即使<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)。然后,如果值包含“和”,则需要对它们中的任何一个进行转义,具体取决于您使用哪个作为值分隔符。

但是,您不需要使用实体引用。也可以使用字符引用&#x22;&#x27;(或等效的十进制引用)。

对于字符串

她说:“我不知道。”

正确的英文拼写是

她说:“我不知道。”

使用正确的标点符号,不会出现标记问题,因为您可以使用Ascii引号“或Ascii撇号作为分隔符。它们适用于计算机语言,而不是人类语言。