我有以下内容:
<?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**)
有人可以帮忙吗?
预先感谢
答案 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分成更多行,也不必担心,这样可以更轻松地识别错误。