是否可以用双引号替换这些单引号?

时间:2016-11-04 13:11:37

标签: javascript css html5 double-quotes single-quotes

我在尝试使用双引号(" ...")替换单引号(' ...")时遇到了一些麻烦代码:

 php -r 'print sprintf("%s%s%s", "<cite>", preg_replace("!<[^>]+>!","", "<cite>Quote from <a href=\"/page.php\" class=\"link\">Testuser » 29.09.2016 15:08</a>:</cite>"), "</cite>");'

每当我尝试用双打替换单引号时,代码就会中断,我似乎无法找到不同的解决方案。我被告知根本不使用单引号 - 这是一个例外吗?

感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

您无法在由"个字符分隔的HTML属性值中使用文字"。它会过早地终止属性值。

您可以将其中一个包含为&quot;,但这会使代码难以阅读。

<img id="image" src="images/bird.jpg" onmouseover="PlaySound(&quot;mySound&quot;); this.src=&quot;images/bird_second_frame.jpg&quot;" onmouseout="StopSound(&quot;mySound&quot;); this.src=&quot;images/bird.jpg&quot;">
  

我被告知根本不使用单引号 - 这是一个例外吗?

没有。你刚收到了不好的建议。

JavaScript和HTML不区分'",除非确定哪些字符可以显示在它们之间而不进行转义。

在您的示例中使用'更具可读性。

更好的方法是完全避免使用内联JavaScript。

<img id="image" 
     src="images/bird.jpg"
     data-sound="mySound"
     data-frame="images/bird_second_frame.jpg">

<script>
    var element = document.getElementById("image");
    element.addEventListener("onmouseover", play);
    element.addEventListener("onmouseover", stop);

    function play() {
        PlaySound(this.dataset.sound);
        this.dataset.original = this.src;
        this.src = this.dataset.frame;
    }

    function stop() {
        StopSound(this.dataset.sound);
        this.src = this.dataset.original;
    }
</script>

答案 1 :(得分:3)

你不能在由双引号限定的字符串中使用双引号,因为它们会结束字符串。

在这种情况下,您使用单引号是合适的。

答案 2 :(得分:1)

您可以在JavaScript中自由使用单引号;它们在语法上等同于双引号字符(尽管任何单个字符串常量必须由相同类型的引号绑定)。这也适用于HTML,所以你可以通过使用属性值分隔符的单引号在JavaScript中获得双引号:

<button onclick='alert("Hello World")'>Click Me</button>

但是,如果你真的想要双引号,你可以将它们作为HTML实体转义:

<button onclick="alert(&quot;Hello World&quot;)">Click Me</button>

这很丑陋但它确实有效:HTML解析器专门寻找引号字符。

最好的要做的是停止在HTML中嵌入JavaScript事件处理程序设置,并使用JavaScript完全执行。