json_encode添加特殊字符

时间:2012-08-30 23:30:42

标签: php javascript jquery

现在无需阅读无聊的代码,让我简单总结一下发生了什么。 当文档加载时,XHR请求通过jQuery post函数发出。帖子将POST标头发送到PHP文件,该文件调用另一个php文件来处理一些字符串并将其返回。最后,一个回显的json_encode函数将字符串返回给jQuery post函数,然后jQuery将其操作到DOM中。

JavaScript的post函数返回的结果如下:

<option value="\&quot;auto2\&quot;">auto2&lt;\/option&gt;</option>

查看所有转义字符?好吧,我尝试在PHP端回显结果,而不是用echo json_encode函数回复:

<option value="auto">auto</option>

没有任何其他特殊字符。这是你想要的。我的问题是,这可以使用吗?为什么json_encode会添加特殊字符?有没有办法使用json_encode而不返回其他字符?

修改

JS

    $(document).ready(function() {
    var PROCESSOR_FILE = "http://address/include/processor.php";

    $.post(PROCESSOR_FILE, {"task": "verticalSelect"}, function(data) {
        $("#verticalSelect").html(data);
    });
});

PHP

$IMEXporterpath = dirname(__FILE__);
$IMEXporterFile = $IMEXporterpath . "/IMEXporter.class.php";

if (isset($_REQUEST["task"]))
    $task   = $_REQUEST["task"];
else
    $task   = "";


    require_once $IMEXporterFile;
    $IMEXp = new IMEXp();

    $result = $IMEXp->returnHtml($task);
    echo json_encode($result);

更多PHP

public function returnHtml($element) {
        return $this->returnHtml_HTML($element);
    }


    private function returnHtml_HTML($element) {
        if($element == "verticalSelect") {

            $dbTables   = $this->get_Tables();
            $nbTable    = count($dbTables);

            for ($a = 0; $a < $nbTable; $a++) {
                    $ZHTML  .=  '<option value="'.$dbTables[$a].'">'.$dbTables[$a].'</option>';
            }
        }
        return $ZHTML;
    }

2 个答案:

答案 0 :(得分:0)

没有看到一些代码,很难知道发生了什么,也许我不明白你的问题。根据我的经验,最好把所有东西都放在UTF-8中。我记不起来了,但在某些情况下,UTF-8是AJAX的默认设置。对不起我的含糊不清,但如果您不使用UTF-8,似乎没有一个好的解决方法。

这意味着您应该将数据库中的所有表格更改为UTF-8,以UTF-8格式保存所有文件(我使用TextPad更改格式),并将所有HTML页面指定为UTF-8。

我不得不经历那种不愉快的经历,因为我用葡萄牙语开发了很多重音字符的网站。我曾经尝试使用ISO-8859-1,但在使用AJAX后,我发现UTF-8确实是唯一可行的选择。

答案 1 :(得分:0)

在PHP 5.3.13上:     

header("Content-Type: text/plain"); // to make sure browser displays raw html
$str = '<option value="auto">auto</option>';

echo json_encode($str);
echo "\n";
echo $str;

输出

"<option value=\"auto\">auto<\/option>"
<option value="auto">auto</option>

此处没有转换的特殊字符。

$.post('test.php').done(function(text){
  return console.log(text);
});

将相同的内容打印到控制台。

如果没有AJAX,json_encode($ str)会显示&quot;等吗?