首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >转义脚本标记php中的单引号

转义脚本标记php中的单引号
EN

Stack Overflow用户
提问于 2018-08-15 06:52:03
回答 2查看 862关注 0票数 0

我有以下几点:

代码语言: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>'; ?>

其在页面上创建和iframe,并将iframe的主体标签的onload属性设置为url变量的值。

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

代码语言:javascript
复制
<body onload="window.location.href='http://myurl.com'"></body> (**Noticed the single quotes around the url?**)

但我得到的却是:

代码语言:javascript
复制
<body onload="window.location.href=http://myurl.com"></body> (**without single quotes around the url**)

有人能帮上忙吗?

提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-15 07:08:03

试试这个:

代码语言: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值,所以如果您使用双引号来管理PHP中的字符串,则会更容易。通过这种方式,onload函数可以使用\“加载,而要获取url值,只需在主字符串中执行\‘即可。

如果你将Javascript拆分成更多的行,也不用担心,这将更容易识别错误。

票数 2
EN

Stack Overflow用户

发布于 2018-08-15 07:01:47

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

代码语言:javascript
复制
<?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版本的工作方式类似于',它不替换变量。是这样做的

代码语言:javascript
复制
 <?php
 <<<'TAG'
 SOME CONTENT
 TAG;

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

更新

正如评论中提到的,如果你想在url周围添加额外的',你必须对它们进行转义,但这是为了Javascripts的目的,而不是为了PHP。总体而言,它仍然使代码更容易处理。

代码语言:javascript
复制
.write('<body onload="window.location.href=\''+url+'\'">');

因为对于Javascript来说,这是无法避免的,但您不必担心由于PHP而导致的额外转义。我很确定如果没有HEREDOC,你需要添加2个额外的\到它像这样的href=\\\''+url+'\\\',这是相当丑陋的,或者改变你的双引号为',我真的不喜欢带有单引号的标签(这是我的一个恼人的) <script type='text/javascript' ...它对我来说就是丑陋。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51850757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档