1

现在不必阅读无聊的代码,让我简单总结一下发生了什么。当文档加载时,一个 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;
    }
4

2 回答 2

0

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

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

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

于 2012-08-30T23:50:43.783 回答
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;等吗?

于 2012-08-30T23:53:49.923 回答