Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php UTF-8字符未以JSON格式正确显示_Php_Json_Pdo_Utf 8_Character Encoding - Fatal编程技术网

Php UTF-8字符未以JSON格式正确显示

Php UTF-8字符未以JSON格式正确显示,php,json,pdo,utf-8,character-encoding,Php,Json,Pdo,Utf 8,Character Encoding,我使用json从数据库中回显变量。然而,显示为■. 为了纠正这一点,我做了以下工作: 没有运气。你知道怎么解决吗 编辑: 1) 在JSON\u encode中使用JSON\u UNESCAPED\u UNICODE 2) 确保数据存储、数据访问、, 以UTF-8字符集()进行输出和输入。首先,查看您的表是否实际进行了utf8编码。它应该是这样的: CREATE TABLE `Schools` ( `id` int(11) NOT NULL AUTO_INCREMENT, `School

我使用json从数据库中回显变量。然而,显示为■.

为了纠正这一点,我做了以下工作:

没有运气。你知道怎么解决吗

编辑:

1) 在
JSON\u encode
中使用
JSON\u UNESCAPED\u UNICODE

2) 确保数据存储、数据访问、,
以UTF-8字符集()进行输出和输入。

首先,查看您的表是否实际进行了utf8编码。它应该是这样的:

CREATE TABLE `Schools` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `School` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
$dsn = 'mysql:dbname=test;host=127.0.0.1;port=3306;charset=utf8';
$user = 'root';
$password = 'password';
$conn = new PDO($dsn, $user, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]);
然后按如下方式连接到数据库:

CREATE TABLE `Schools` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `School` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
$dsn = 'mysql:dbname=test;host=127.0.0.1;port=3306;charset=utf8';
$user = 'root';
$password = 'password';
$conn = new PDO($dsn, $user, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]);
最后使用
JSON\u UNESCAPED\u UNICODE

echo json_encode($row, JSON_UNESCAPED_UNICODE);
这应该能奏效

更新

这在上面提供的表I的PHP7.1上起作用:

if (isset($_GET['term'])) {
    $return_arr = array();

    try {
        $conn = new PDO("mysql:host=127.0.0.1;port=8101;dbname=test;charset=utf8", $user, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $stmt = $conn->prepare('SELECT School FROM Schools WHERE School LIKE :term');
        $stmt->execute(array('term' => '%'.$_GET['term'].'%'));

        $return_arr = [];
        while($row = $stmt->fetch()) {
            $return_arr[] =  $row['School'];
        }

    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }


    /* Toss back results as json encoded array. */

    echo json_encode($return_arr, JSON_UNESCAPED_UNICODE);

}

您是否考虑过
JSON\u UNESCAPED\u UNICODE
标志?看,我确实试过了,但结果还是一样■', '汽车),;返回它已经是UTF-8。JSON_UNESCAPED_UNICODE对您没有帮助,因为“\xc3\xa9”是默认的UNICODE。我怀疑问题出在你的数据库字符集上,而不是数据库。我已经通过编写一个test.php来进行测试,以在不使用json的情况下回显变量。如果没有JSON,它将正确显示。它可能仍然是数据库。如果从数据库中获取变量,然后运行echo mb_detect_encoding($variable,'auto'),结果会是什么?它不是数据库。我已经通过编写一个test.php来进行测试,以在不使用json的情况下回显变量。如果没有JSON,它将正确显示。@charlester连接到数据库时,您仍然需要设置字符集,如果没有字符集,它将无法工作。查看我的更新答案。它不是数据库。我已经通过编写一个test.php来进行测试,以在不使用json的情况下回显变量。如果没有JSON,它将正确显示。