特殊字符和json_encode

时间:2016-10-18 03:02:39

标签: php mysql json

我试图从mysql数据库中提取一些信息,然后json对其进行编码。我遇到了特殊字符的问题。我将从包含特殊字符的数据库中提取信息,但是当我使用PHP json_encode函数时,它无法编码并返回FALSE。

我已尝试过以下两种方法。

在我的查询中,我有这个:

CONVERT(item_stub.name USING utf8)

那似乎没有做任何事情。所以我在查询后添加了以下内容将数据转换为UTF8:

    while($r = $db->fetch($result)){
      $r[] = array_map('utf8_encode', $r);

这似乎处理非utf8单引号,但我仍然遇到商标符号的问题。

我也尝试过使用PHP htmlentities和htmlspecialchars函数,但这些函数也像json_encode一样失败

3 个答案:

答案 0 :(得分:0)

  

尝试将ENT_QUOTES标记添加到htmlspecialchars()。它会像你这样照顾单引号和双引号:

   <?php

       while($r = $db->fetch($result)){
          $r[] = array_map(
                  'utf8_encode', 
                   htmlentities(htmlspecialchars($r, ENT_QUOTES, 'UTF-8', true)));
          // CODE CONTINUES... (IF ANY)...
       }

QUICK-TEST THIS:

    $r = "™™™™@†©√∫∫~ªß¥ß∂ƒåßßå∑€ƒ∑€åå€∑€∑ƒ";
    $s = htmlentities(htmlspecialchars($r, ENT_QUOTES, 'UTF-8', true));
    var_dump($s);
    //YIELDS:
    '&trade;&trade;&trade;&trade;@&dagger;&copy;&radic;&int;&int;~&ordf;&szlig;&yen;&szlig;&part;&fnof;&aring;&szlig;&szlig;&aring;&sum;&euro;&fnof;&sum;&euro;&aring;&aring;&euro;&sum;&euro;&sum;&fnof;' (length=196)

答案 1 :(得分:0)

在使用array_map函数之前必须确保。

  1. 检查您的PHP文件编码,它应该是UTF-8 File Encoding

  2. 使用PHP 标题(header('Content-Type: text/html; charset=utf-8');)或元 tag(<meta http-equiv="Content-type" content="text/html; charset=utf-8" />)允许文件处理UTF8 char。

  3. 在获取信息之前运行SET NAMES 'utf8' sql。
  4. 然后使用array_map和json_encode函数。它可能会帮助你。

答案 2 :(得分:0)

试试这个

json_encode($objectSubstitutions, JSON_UNESCAPED_UNICODE)