我正在尝试将巴西葡萄牙语中的值转换为JSON的数组。
这是一个数组示例:
array(1) {
["title"]=>
string(77) "Cartão Credicard Universitário Visa Crédito "
}
如果我使用mb_detect_encoding
它,则表明所有值和键都是ASCII或UTF8。
但是,如果我尝试使用json_encode
生成json,它会返回一个false,json_last_error
函数会说错误是JSON_ERROR_UTF8
但是,如果我首先将utf8_encode_deep
函数应用于数组(http://php.net/manual/es/function.utf8-encode.php),则会生成json且不会给出任何错误。
该解决方案的问题在于它返回了某些编码错误的单词。
例子:
申请之前的词utf8_encode
:Cartão(良好编纂)
申请后的词utf8_encode
:Cartão(错误的编纂)
因此,尽管它生成了JSON,但由于它弄乱了单词,因此无法解决我的问题。
这是我正在使用的代码:
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$database;", $username, $password);
$sql = "SELECT title FROM card";
$stmt = $dbh->query($sql);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$json = $json_encode($result);
$error = json_last_error();
var_dump($json, $error === JSON_ERROR_UTF8);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage() . '\n';
}
如果我尝试使用charset = utf8或charset = utf8mb4连接到数据库,它将检索Cartão
(错误编码)而不是Cartão
(良好编码)
我也曾尝试将JSON_UNESCAPED_UNICODE
用作参数json_encode
,但结果仍然与未使用此参数相同。
有什么建议?
更新:我已通过一个具体情况简化了此示例,发生了此问题。
更新2:添加了一些代码以阐明示例,并在注释中添加了有关可能解决方案的一些说明。
“如果我尝试使用charset = utf8或charset = utf8mb4连接到数据库,它将检索Cartão(错误编码),而不是Cartão(良好编码)”
您使用的是latin1作为显示编码,因此UTF-8编码的正确文本无法正确显示。
添加charset=utf8
到连接字符串,并将响应字符集设置为UTF-8:
header('Content-Type: text/html;charset=utf-8');
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句