回复javascript而无需更改代码

时间:2014-10-31 22:05:29

标签: php

你好我需要回应javascript代码,但我不知道要逃避单引号。 如果我更改单引号并用双引号替换它,我对此更改有任何问题吗?

(function() {
    var as = document.createElement('script');
    as.type = 'text/javascript';
    as.async = true;
    as.src = "https://bf1cthsdr.cloudfront.net/atrk.js";
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(as, s);
})();

我需要做这样的回音:

echo '(function() { var as = document.createElement('script'); as.type = 'text/javascript'; as.async = true; as.src = "https://d31qbv1cthcecs.cloudfront.net/atrk.js"; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(as, s); })();';

3 个答案:

答案 0 :(得分:3)

如果您想避免在字符串文字中转义引号,请使用PHP's Heredoc syntax

echo <<<END
(function() { var as = document.createElement('script'); as.type = 'text/javascript'; as.async = true; as.src = "https://bf1cthsdr.cloudfront.net/atrk.js"; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(as, s); })();
END;

如果您愿意花时间逃避特殊字符,则需要使用\字符来逃避JavaScript中的'字符:

echo '(function() { var as = document.createElement(\'script\');...etc...';
//                                                  ^       ^

一个好的IDE将语法突出显示您的PHP,因此应该更容易看到文本被错误地转义。

组织代码的更好方法是将JS移动到单独的文件中:

<子>的script.js
(function() { var as = document.createElement('script'); as.type = 'text/javascript'; as.async = true; as.src = "https://bf1cthsdr.cloudfront.net/atrk.js"; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(as, s); })();
<子>的script.php
...other code...
include('script.js');
...more code...

这更好的原因是因为您可以在编辑器中单独修改JS代码,允许您使用语法突出显示您的JS。

答案 1 :(得分:2)

要逃避',您需要在其前面放置\。由于您的字符串用单引号括起来,因此其中的每个引号都需要看起来像\'

如果你的字符串用双引号括起来也是如此。您需要使用\"转义字符串中的所有双引号。

echo '(function() { var as = document.createElement(\'script\'); as.type = \'text/javascript\'; as.async = true; as.src = "https://d31qbv1cthcecs.cloudfront.net/atrk.js"; var s = document.getElementsByTagName(\'script\')[0];s.parentNode.insertBefore(as, s); })();';

答案 2 :(得分:0)

如果您有很多引号放在引号内,那么请执行以下操作:

echo "(function() { var as = document.createElement('script'); as.type = 'text/javascript'; as.async = true; as.src = 'https://d31qbv1cthcecs.cloudfront.net/atrk.js'; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(as, s); })();";

您不能将相同类型的引号放在另一个中,因为PHP会查找未使用\转义的下一个匹配引号。

我通常在单引号内放置双引号以允许PHP变量插入,因为如果有很多引号,它会保存我命中Shift键,键入双引号需要。