【问题标题】:Euro symbol is shown as \u00e2\u0082\u00ac and â¬â¬欧元符号显示为 \u00e2\u0082\u00ac 和 â¬â¬
【发布时间】:2017-07-19 12:01:08
【问题描述】:

我知道有很多关于这个问题的话题,但我花了最后几个小时尝试各种方法,但我离解决方案还很远。就这样吧……

这是我的 jquery:

$.post('inc/app_json_f.php',{params:priv_params}, function (data) {
  console.log(data);
  // displays: \u00e2\u0082\u00ac instead of €
  data = JSON.parse(data);
  console.log(data);
  // displays: â¬â¬ instead of €
}

这是我的 php(app_json_f.php 页面):

$qry = 'select ... from ... where ...';
$data = $db->do_select($qry);

echo json_encode(f_utf8_json($data));

f_utf8_json 函数将检查 $data 并使用 utf8_encode() 转换每个值。

此时,echo json_encode(...) 会在控制台显示如下内容:

\u00e2\u0082\u00ac

而我想看到€符号。

数据来自具有排序规则 utf8_general_ci 的 MySQL 数据库。 PHP 的字符集是 UTF-8。

有什么建议吗?

【问题讨论】:

标签: php jquery mysql json utf-8


【解决方案1】:

对于使用 curl 发送文件,您需要使用此工作代码。

if(!empty($postfields['image'])){
$file_name_with_full_path = $postfields['image'];
  if (function_exists('curl_file_create')) { // php 5.6+
    $cFile = curl_file_create($file_name_with_full_path);
  } else { // 
    $cFile = '@' . realpath($file_name_with_full_path);
  }
  $postfields['fileToUpload'] =  $cFile;

}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
$result=curl_exec ($ch);
curl_close ($ch);

用户 curl_file_create

【讨论】:

    【解决方案2】:

    使用json_encode() 时,将JSON_UNESCAPED_UNICODE 作为第二个参数包含在内,这样您就不会得到\u0123 类型代码,而是得到UTF-8。

    的 UTF-8 编码的十六进制是 E2ACE2AC。 (MySQL 的 utf8utf8mb4 也是如此。)

    如果你得到€,那么你就有了“Mojibake”。

    如果您将 UNHEX(E2ACE2AC) 视为 cp1250、cp1256、cp1257、latin1、latin5、latin7 中的任何一个,您将得到 â¬â¬。听起来你正在复合错误才能到达那里。

    在此处查看“最佳做法”和其他调试提示: Trouble with utf8 characters; what I see is not what I stored

    【讨论】:

      【解决方案3】:

      通过删除 f_utf8_json 函数(使用 utf8_encode() 将值转换为 utf8 的函数),一切正常。奇怪,因为我在项目的早期添加了这个功能,因为它是获得正确结果的必要条件。我必须仔细检查,但可能是另一个数据库设置导致此问题。

      问题解决了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多