5

我们有这样的代码:

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 实体(Like &quot;htmlentities()或类似功能的情况下修复它?

4

2 回答 2

10

有没有办法在使用 HTML 实体(Like &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));

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

于 2013-09-07T21:16:49.260 回答
-1

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

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

在字符串的情况下

她说:“我不知道。”

正确的英文拼写是

她说:“我不知道。”</p>

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

于 2013-09-07T21:17:50.020 回答