1

解决了

用 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>";

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

4

1 回答 1

1

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

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

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

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

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

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

编辑:

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

尝试替换html_entity_decode()htmlspecialchars()

于 2013-08-21T19:56:41.977 回答