我们有这样的代码:
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()
或类似函数的情况下修复它?
有没有办法在不使用 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));
只是一个缩短的示例,应该演示它是如何工作的。在线演示。
为了解决标题中的问题,在属性值中同时使用 " 和 ' 没有问题。问题出现在值的线性化中,即用HTML标记编写它们(与使用客户端JavaScript生成它们相反)。然后,如果值同时包含 " 和 ',则需要对其中任何一个进行转义,具体取决于您使用哪一个作为值分隔符。
但是,您不需要使用实体引用。也可以使用字符引用"
和'
(或等效的十进制引用)。
在字符串的情况下
她说:"我不知道。
正确的英文拼写是
她说:"我不知道。
使用正确的标点符号,不会出现标记问题,因为您可以使用 Ascii 引号 " 或 Ascii 撇号作为分隔符。它们旨在用于计算机语言,而不是人类语言。