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


Single and double quotes together as HTML attribute value?

我们有这样的代码:

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()或类似函数的情况下修复它?

有没有办法在不使用 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));

只是一个缩短的示例,应该演示它是如何工作的。在线演示。

为了解决标题中的问题,在属性值中同时使用 " 和 ' 没有问题。问题出现在值的线性化中,即用HTML标记编写它们(与使用客户端JavaScript生成它们相反)。然后,如果值同时包含 " 和 ',则需要对其中任何一个进行转义,具体取决于您使用哪一个作为值分隔符。

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

在字符串的情况下

她说:"我不知道。

正确的英文拼写是

她说:"我不知道。

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