【问题标题】:Convert "Java source code characters" in JSON string using PHP使用 PHP 转换 JSON 字符串中的“Java 源代码字符”
【发布时间】:2013-06-24 04:54:24
【问题描述】:

我有一个包含 Dal\u00e9 的 JSON 字符串。当我在 JSON 上使用 json_decode 时,它会转换为 Dalé,但是 JSON 来自的原始字符串是 Dalé。为什么没有正确转换?

我有found"\u00E9"é 的 C/C++/Java 源代码编码。但是,对我来说,这并不能解释为什么会出错。


不正确的 PHP 输出示例:

<?php
$opts = array('http'=>array('ignore_errors' => true));
$context = stream_context_create($opts);
$jsonurl = "http://api.kivaws.org/v1/loans/552804.json";
$json = file_get_contents($jsonurl, false, $context);
$json_output = array(json_decode($json));
$json_error = $json_output[0]->error;
$json_message = $json_error->message;

foreach ($json_output[0]->{'loans'} as $loan) {
echo 'Name: '.$loan->{'name'};
}
?>

【问题讨论】:

  • php 可以很好地处理 json 中的 unicode 转义序列。很可能,您在其他地方使用了该字符串,或者您没有告诉网络浏览器您正在给它 utf8。
  • ideone.com/0BRsYA - 工作正常
  • @Ignacio Vazquez-Abrams:你在夸大其词
  • 也许吧。但这并不一定意味着我错了。

标签: php json encoding


【解决方案1】:

你需要告诉网络浏览器你给它什么编码。

<?php
header('content-type: text/plain; charset=utf-8');
var_dump(json_decode($jsonStr));

【讨论】:

  • 注意:对于我的情况(在网页中有这个)我将使用header('content-type: text/html; charset=utf-8');
  • @michaellindahl:你的 cmets 令人困惑 ;-)
  • @zerkms 他们对我来说完全有意义:P 显然我没有设置字符集并依赖于错误的默认值。我不明白这需要在 PHP 标头中设置,我以前从未这样做过。
  • 有什么理由需要这样做吗?我应该在 PHP 中为每个网页设置标题还是仅在某些情况下?
  • @michaellindahl 否则,浏览器必须猜测。而且,在许多情况下,无法保证正确的猜测,这会导致整个软件出现不稳定和令人费解的错误。一个强大的网络软件总是每次都为每个页面指定编码。
【解决方案2】:

如果你使用的是 php 5.4,你可以像这样使用 json_encode() 的函数选项:-

echo $b=json_encode('Dalé',JSON_UNESCAPED_UNICODE);
echo json_decode($b);

【讨论】:

    猜你喜欢
    • 2019-04-09
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多