Javascript方法是否会自动转义引号?

问题描述 投票:0回答:2

我想知道javascript方法是否自动转义引号,因为这段代码有效:

示例#1

<?php $foo ="hey a quote ' "; ?>
<input type="text" value="<?php echo $foo; ?>" id="foo" />
<script>
    bar = document.getElementById('foo').value;
    alert(bar+'there is a quote, will it work? ,');
</script>

它显示警报正常,但这一个:

例#2

<?php $foo ="hey a quote ' "; ?>
<button onclick="alert('<?php echo $foo; ?>');">test</button>

......没有。显然,这是因为报价没有使用\进行转义。

但话说回来,第一个例子中也没有,为什么会这样呢?当javascript的方法从DOM中选择东西时,它是否会自动转义引用?

或者它只是value()方法可能?

我什么也没找到,所以如果你的答案开头,我会很高兴的。

javascript html dom quotes
2个回答
1
投票

PHP在服务器上处理,生成HTML(在这种情况下包括嵌入式javascript)。这是在将HTML发送到浏览器进行解释之前发生的,包括任何JS。

您将看到是否检查生成的HTML源,您的第二个示例变为:

<button onclick="alert('hey a quote ' ');">test</button>

这是无效的JS语法。

您的第一个版本的工作原理基本上是因为您的PHP字符串插入的代码中没有无关的单引号。插入代替产生:

<input type="text" value="hey a quote ' " id="foo" />

这很好。然后将该值传递给JS中的alert调用。


0
投票

不同之处在于,在第一个代码示例中,引用出现在没有包装单引号的上下文中,因此没有歧义。如果你用单引号包装HTML属性值(也是有效的HTML),你就会遇到问题:

<?php $foo ="hey a quote ' "; ?>
<input type='text' value='<?php echo $foo; ?>' id='foo' />

在这种情况下,单引号应该作为HTML实体进行转义:&apos;

<?php $foo ="hey a quote &apos; "; ?>
<input type='text' value='<?php echo $foo; ?>' id='foo' />

现在,在您提供的第二个代码示例中,单引号将出现在包装的单引号中(对于传递给alert的字符串文字)。这是一个问题,因为单引号现在将结束字符串文字,其后面的字符将导致语法错误。

这里的引用出现在JavaScript字符串文字(alert代码)中,而不是在第一个示例的HTML上下文中。在JavaScript字符串文字中,单引号可以使用反斜杠进行转义。

因此,在这两种情况下(HTML或JavaScript),您都需要一种转义形式。它们是不同的。

请注意,这些都与PHP无关。

© www.soinside.com 2019 - 2024. All rights reserved.