【问题标题】:character encoding php - javascript字符编码 php - javascript
【发布时间】:2014-07-24 21:25:24
【问题描述】:

我有一个管理数据库中实体的 php 文件。我想要做的是从数据库中检索一组字符串并通过 json_encode 将其返回给 javascript 函数。

问题是当 php 脚本检索值时,重音字符显示得很好。

当我这样输出时:

echo "<pre>";
print_r($row);
echo "</pre>";

我明白了:

Array
(
    [0] => 1
    [1] => Que és la bolsa de trabajo de la FIB?
)

但是当我想通过 json_encode 将数据返回给 ajax 调用时,我得到了这个:

["1","Que \u00e9s la bolsa de trabajo de la FIB?"]

我在 json_encode 中输出数据之前要做的是:

function encode_items(&$item, $key)
{
    $item = utf8_encode($item);
}

array_walk_recursive($stack, 'encode_items');
echo json_encode($stack);

关于如何正确编码的任何想法?我假设如果在我的 PHP 回声中正确显示它会在我的 javascript ajax 调用中显示正常,对吗?

谢谢

【问题讨论】:

  • 我看不出那个 JSON 输出有什么问题?
  • 您的JSON 编码正确,因为特殊字符需要在JSON 字符串中编码。如果您使用 jQuery html() 函数进行输出,则特殊字符将被正确编码为它们的 html 等效项。例如:$("#container").html(json_string);
  • 你应该使用echo htmlspecialchars(print_r($row, true)); btw
  • 很好,我将结果打印为 html 内容,它可以很好地显示重音字符。谢谢大家

标签: javascript php json utf


【解决方案1】:

您的 JSON 结果没有问题。

PHP 5.4 之后,您可以根据需要使用JSON_UNESCAPED_UNICODE 选项。

echo json_encode($stack, JSON_UNESCAPED_UNICODE);

【讨论】:

  • 是的!击败你 5 秒 :-)
【解决方案2】:

您正在为json_encode 寻找JSON_UNESCAPED_UNICODE flag

JSON_UNESCAPED_UNICODE整数
对多字节 Unicode 字符进行逐字编码(默认转义为 \uXXXX)。 自 PHP 5.4.0 起可用。

$stack 输入数组无关。顺便说一句,这些转义值是有效的 JSON,没有必要避免它们。如果您不使用 Unicode 编码发送 HTML,它们甚至会让您的生活更轻松。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 2016-07-15
    • 2011-02-21
    • 2014-02-20
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多