我有以下几点:
<?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的主体标签的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**)
有人能帮上忙吗?
提前感谢
发布于 2018-08-15 07:08:03
试试这个:
<?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值,所以如果您使用双引号来管理PHP中的字符串,则会更容易。通过这种方式,onload函数可以使用\“加载,而要获取url值,只需在主字符串中执行\‘即可。
如果你将Javascript拆分成更多的行,也不用担心,这将更容易识别错误。
发布于 2018-08-15 07:01:47
我个人会用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周围添加额外的'
,你必须对它们进行转义,但这是为了Javascripts的目的,而不是为了PHP。总体而言,它仍然使代码更容易处理。
.write('<body onload="window.location.href=\''+url+'\'">');
因为对于Javascript来说,这是无法避免的,但您不必担心由于PHP而导致的额外转义。我很确定如果没有HEREDOC,你需要添加2个额外的\
到它像这样的href=\\\''+url+'\\\'
,这是相当丑陋的,或者改变你的双引号为'
,我真的不喜欢带有单引号的标签(这是我的一个恼人的) <script type='text/javascript' ...
它对我来说就是丑陋。
https://stackoverflow.com/questions/51850757
复制相似问题