转义脚本标签内的单引号 php

Escape single quotes inside script tag php

我有以下内容:

<?php echo '<script type="text/javascript">(function(d) {var url="http://myurl.com"; var iframe = d.createElement("iframe");(iframe.frameElement || iframe).style.cssText = "width: 0; height: 0;border: 0;"; iframe.src = "javascript:false"; d.body.appendChild(iframe);var doc = iframe.contentWindow.document; doc.open().write(\'<body onload="window.location.href=\'+url+\'">\'); doc.close();})(document); </script>'; ?>

在页面上创建iframe并将iframe的body标签的onload 属性设置为url变量的值。

我遇到的问题是,我希望 url 的值用单引号括起来,例如:

<body onload="window.location.href='http://myurl.com'"></body> (**Noticed the single quotes around the url?**)

但我却得到了:

<body onload="window.location.href=http://myurl.com"></body> (**without single quotes around the url**)

有人可以帮忙吗?

提前致谢

我个人会使用 HEREDOC。它们不是那么有名,但它们是处理字符串的非常强大的方法

<?php
        echo <<<CODE 
<script type="text/javascript">(function(d) {var url="http://myurl.com"; var iframe = d.createElement("iframe");(iframe.frameElement || iframe).style.cssText = "width: 0; height: 0;border: 0;"; iframe.src = "javascript:false"; d.body.appendChild(iframe);var doc = iframe.contentWindow.document; doc.open().write('<body onload="window.location.href=\''+url+'\'">'); doc.close();})(document); </script>

CODE; //<-- note nothing can come before or after this no spaces or even this comment.

正如我在代码中输入的那样 没有任何东西可以出现 before/after 结束标识符 (在这种情况下为 SCRIPT)甚至没有一个 space 否则它不会工作。除了 ; 之外,您实际上可以在将它放入数组时将其省略,但这是另一天的故事。

标识符可以是任何东西,但它不应出现在文本中是一个很好的通用规则。

这里的优点是我们没有使用引号或单引号将其标记为字符串,因此我们可以同时使用两者。在正常使用之外(不需要 PHP 的目的)

,没有必要用这个来逃避它们

就变量插值(用变量值替换变量)而言,HEREDOC(上文)的工作方式与 " 类似。

NOWDOC 版本的工作方式类似于 ',它不会替换变量。这样做是这样的

 <?php
 <<<'TAG'
 SOME CONTENT
 TAG;

注意 <<<'TAG' 而不是 <<<TAG。与我上面提到的结尾 "tag" 相同的规则适用。这是非常非常非常重要的,这就是为什么我把它加粗并提到了 3 次。

更新

如评论中所述,如果你想在 url 周围添加额外的 ',你将不得不转义它们,但这是为了 Javascript 的目的,而不是 PHP。总的来说还是让代码更容易处理。

.write('<body onload="window.location.href=\''+url+'\'">');

因为 Javascript 没有办法绕过它,但你不必担心 PHP 导致的额外转义。我敢肯定,如果没有 HEREDOC,您将需要像这样 href=\\''+url+'\\' 添加 2 个额外的 \,这非常难看,或者将双引号更改为 ',我真的不知道不喜欢带单引号的标签(这是我的一个小毛病)<script type='text/javascript' ... 这对我来说太丑了。

试试这个:

<?php echo  "<script type='text/javascript'>
(function(d){
    var url='http://myurl.com'; 
    var iframe = d.createElement('iframe');
    (iframe.frameElement || iframe).style.cssText = 'width: 0; height: 0;border: 0;'; 
    iframe.src = 'javascript:false'; 
    d.body.appendChild(iframe);
    var doc = iframe.contentWindow.document; 
    doc.open().write('<body onload=\"window.location.href=\''+url+'\'\">'); 
    doc.close();
})(document); 
</script>";
 ?>

主要错误在于您转义单引号的方式。

因为您正在尝试获取 href 值,所以您需要先进行 scape 和连接,如果您使用双引号来管理 PHP 中的字符串会更容易。通过这种方式,可以使用 \" 加载 onload 函数,而要获取 url 值,只需在主字符串中执行 \' 即可。

如果您将 Javascript 分成更多行,也不要担心,这样更容易识别错误。