在脚本标记php中转义单引号

时间:2018-08-14 22:52:03

标签: javascript php escaping php-5.6

我有以下内容:

<?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**)

有人可以帮忙吗?

预先感谢

2 个答案:

答案 0 :(得分:2)

我个人会使用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.

我在代码中输入了结尾标识符之前/之后(在这种情况下为SCRIPT)之前/之后都没有,甚至没有一个空格,否则它将不起作用。除了;以外,您实际上可以将其放入数组中,而不必考虑其他内容。

标识符可以是任何东西,但在一般情况下不应出现在文本中。

此处的优点是我们不使用引号或单引号将其标记为字符串,因此使我们可以同时使用两者。无需在正常使用范围内逃脱它们(不需要PHP的目的)

在变量插值方面(上面的变量替换为变量),HEREDOC(上方)的工作方式类似于"

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

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

通知<<<'TAG'而不是<<<TAG。对于结束符“ tag”,我使用了与上述相同的规则。这是非常非常非常重要的原因,这就是为什么我将它大胆地提到了3次。

更新

如评论中所述,如果您想要在URL周围添加额外的',则必须将其转义,但这是出于Java脚本目的,而不是PHP。总体而言,它仍然使代码更易于处理。

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

因为无法为Javascript转义,但您不必担心由于PHP导致的其他转义。我敢肯定,如果没有HEREDOC,您将需要像这样的\添加2个额外的href=\\\''+url+'\\\',这很丑陋,或者将双引号更改为',但我确实不这样做。就像带有单引号的标签一样(它是我的宠儿)<script type='text/javascript' ...对我来说很难看。

答案 1 :(得分:2)

尝试一下:

enter_transaction_management

主要错误在于您对单引号进行了转义。

因为您尝试获取首先需要转义和连接的href值,所以如果您使用双引号来管理PHP中的字符串,则会更容易。这样,可以使用\“加载onload函数,并获取url值,只需在主字符串中执行\'。

如果您将Javascript分成更多行,也不必担心,这样可以更轻松地识别错误。