转义脚本标签内的单引号 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 分成更多行,也不要担心,这样更容易识别错误。
我有以下内容:
<?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 分成更多行,也不要担心,这样更容易识别错误。