2014-10-31 127 views
-2

你好我需要呼应JavaScript代码波纹管,但我不知道逃避单引号。 如果我更改单引号并将其替换为双引号,那么对于此更改会有什么问题吗?回声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); })();'; 
+0

你应该已经知道这个东西。我会为JavaScript使用一个单独的页面,比如''。这样,输出仍然会缓存到客户端浏览器中。 – PHPglue 2014-10-31 22:20:14

回答

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。

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); })();'; 
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键。