javascript - 在脚本标签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.
正如我在代码中输入的那样,在结束标识符(在这种情况下)之前/之后没有任何内容,SCRIPT
甚至没有一个空格,否则它不会工作。除了;
您实际上可以在将其放入数组时将其省略,但这是另一天的故事。
标识符可以是任何东西,但它不应该出现在文本中是一个很好的一般规则。
这里的优点是我们没有使用引号或单引号将其标记为字符串,因此我们可以自由使用两者。除了正常使用之外,没有必要用这个来逃避它们(不需要 PHP 的目的)
就变量插值而言,HEREDOC(上图)的工作方式"
(用它们的值替换变量)。
NOWDOC 版本的工作方式与'
它不替换变量的情况相同。就是这样完成的
<?php
<<<'TAG'
SOME CONTENT
TAG;
注意<<<'TAG'
代替<<<TAG
。与我上面提到的结尾“标签”相同的规则适用。这是非常非常非常重要的,这就是为什么我把它加粗并提到了3次。
更新
正如评论中提到的,如果你想'
在 url 周围有额外的东西,你将不得不对它们进行转义,但这是出于 Javascripts 的目的,而不是 PHP。总的来说,它仍然使代码更容易处理。
.write('<body onload="window.location.href=\''+url+'\'">');
因为对于 Javascript 没有办法避免转义,但是您不必担心由于 PHP 的额外转义。我很确定如果没有HEREDOC,您将需要\
像这样添加2个额外的东西,这href=\\\''+url+'\\\'
很丑陋,或者将您的双引号更改为我真的不喜欢带有单引号的标签( 这'
是我的宠儿) <script type='text/javascript' ...
对我来说很丑。
推荐阅读
- r - 使用 plm 函数创建面板数据时出现类 (x) 错误
- node.js - 如何将生成的身份验证令牌传递给 Twitters api
- angular - ngTemplateOutlet 在 mat-table 中不起作用
- ruby-on-rails - 为什么从新贵脚本中使用 setuid 时我的 RubyGems 环境会有所不同?
- php - 如何使用 PHP 解码使用 OpenSSL DES3 编码的字符串?
- ruby-on-rails - 强参数中的Rails不规则复数关联名称
- numbers - 使用 Applescript 按名称删除 Numbers 表
- sql - 如何通过Excel Source中的变量动态获取Excel文件路径连接?
- angular - 如何访问另一个函数中的变量?
- node.js - 通过nodejs nodemailer后端从pdfkit发送PDF