【问题标题】:Php automatically encoding & in Wordpressphp 自动编码 & 在 Wordpress 中
【发布时间】:2013-08-21 19:38:45
【问题描述】:

已解决

用 htmlspecialchars() 包装 php 中 & 字符的每个实例,通过输出 & 而不是 & 解决了我的问题,并允许下一页正确识别每个变量!

/已解决/

我目前正在开发一个 Wordpress 网站,并尝试在 php 中创建一些 javascript,然后将其回显到页面上。此 javascript 的一部分使用 window.open() 和我在 php.ini 中生成的 url 打开一个新窗口/选项卡。但是,当我回显包含 url 的变量时,所有 & 字符都会自动编码为 &

这是正在发生的事情的一个示例:

...
?>
<script type="text/javascript">
var url = "&";
var url2 = "<?php echo "&"; ?>";
var url3 = <?php echo json_encode("&"); ?>;
var url4 = "<?php echo html_entity_decode("&"); ?>";
var url5 = "<?php echo html_entity_decode("&#038;"); ?>";
</script>
<?php
...

然后,当我检查插入脚本的元素时显示的实际 javascript 是

...
<script type="text/javascript">
    var url = "&#038;";
    var url2 = "&#038;";
    var url3 = "&#038;";
    var url4 = "&#038;";
    var url4 = "&#038;";
</script>
...

我已经尝试 urlencode()-ing 所有 & 的 url,但是 $_GET 不将它们识别为 url 变量。

这只是一个 Wordpress 的东西,还是一个 php 的东西?而且,我能做些什么来让 & 显示为 & 吗?!

编辑

由于我试图做的事情似乎有些混乱,让我进一步解释一下。我正在使用 php 而不是 javascript 创建一个 url。然后我使用 php 生成一些 javascript,然后将其回显到页面上。以上摘录仅显示了我实际面临的问题。实际的鳕鱼段如下所示:

$header_element .= "<script type=\"text/javascript\">\n"
                . "function validateForm(form) {\n"
                . "\tvar isInvalid = false;\n"
                . $str_all_validation
                . "\tif (!isInvalid) {\n"
                . "\t\trunReport(form);\n"
                . "\t} else {\n"
                . "\talert('You must enter all report parameters.');\n"
                . "\t}\n"
                . "}\n"
                . "function runReport(form) {\n"
                . "\twindow.open('/?page_id=172&PageId=$str_page_id&ReportName=$str_report_name"
                . "$str_all_param, '_blank')\n"
                . "}\n"
                . "</script>";

除了将所有 & 字符输出为 &amp;#038; 之外,上述输出正确。

【问题讨论】:

  • 应该是 wordpress。 PHP 不会像那样为你破坏你的输出。不是没有你告诉它的。
  • 问题是 Wordpress 在你给它的所有东西上运行htmlentities()。这在大多数情况下是合适的,但如果您要注入 JavaScript,则不适用。此外,您应该始终在 JavaScript 上下文中使用的任何变量数据周围使用json_encode(),以便正确转义数据。
  • 这个问题似乎是题外话,因为它是关于第三方软件的使用问题,这里是如何用 Wordpress 排队 javascript sn-p。
  • 当您询问禁用时,这是 Wordpress 上的答案:What's the best plugin for allowing javascript in a post or page?

标签: php javascript wordpress


【解决方案1】:

我认为您的页面或 php 的编码混淆了。

尝试在你的 php 中添加这一行:

header('Content-Type: text/html; charset=UTF-8');

这应该确保您使用 php 输出的任何内容都是 UTF-8 格式。

并确保您的 javascrip 编码是相同的。

PS 您可以将charset=UTF-8 部分更改为charset=ISO-8859-1 或您在javascript 中使用的任何编码。

编辑:

不要使用最后一个答案不是编码问题!!!

尝试将html_entity_decode() 替换为htmlspecialchars()

【讨论】:

  • 很遗憾,这对上述任何输出语句都没有影响。
  • 我认为 php 是用 UTF8 编码的,但 javascript 是用 ISO-8859-1 编码的,也许可以尝试将这个:charset="UTF-8" 添加到您的 &lt;script&gt;&lt;/script&gt;
  • 点赞&lt;script charset="UTF-8"&gt;/*dostuffhere*/&lt;/script&gt;
  • 编辑间接解决了我的问题!函数的输出是 &而不是 &,但这对于 url 编码很好,现在下一页可以获取每个单独的 $_GET 变量!我所做的只是在 php.ini 中用 htmlspecialchars("&") 包装任何 & 字符的实例。谢谢!
  • 经过进一步检查,此修复确实让我的页面能够正常工作,但 get 中的变量被存储为 amp;PageId、amp;SessionID 等。这不是世界末日,这个答案仍然解决了我的问题,只是想在这里发表评论,以防其他人出现并看到这个。
猜你喜欢
  • 2018-04-22
  • 2013-05-14
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多