我的查询结果包含一些突出的字符,如:
CollectionTitle => Afleuréss
但是当我用json
写一个json_encode($Result_Array)
文件并检索它显示的结果时:
CollectionTitle => NULL
然后我使用array_map()
:
$res[] = array_map('utf8_encode', $row);
但它导致我:
CollectionTitle => Afleuréss
代替CollectionTitle => Afleuréss
请建议我更好地解决此问题。
由于
答案 0 :(得分:2)
第二个实际上是正确的。问题是您的浏览器无法检测到编码,默认为默认值(可能是ISO-8859-1)。切换浏览器编码,您将看到正确的字符。
答案 1 :(得分:1)
json_encode
仅支持UTF-8,但您应用的其余部分使用的是Windows-1252。我不建议使用utf8_encode
,因为它从ISO-8859-1转换为UTF-8。这只有95%的时间适合你,因为你使用的是Windows-1252,而不是ISO-8859-1 *。
我不知道你是否可以,但如果可以的话,你应该切换到UTF-8,这样你就不需要在任何地方使用这个脆弱的转换代码了。
*这可能令人困惑。浏览器do not actually allow you to use ISO-8859-1而是将其视为Windows-1252。与MySQL相同,Latin1表示Windows-1252。两者都是默认值。 utf8_encode/decode
当然使用实际ISO-8859-1
,因此它在0x80-0x9F范围内不兼容。
答案 2 :(得分:1)
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
请注意,您应该拥有正确的HTML文档类型,因为浏览器默认为非utf8。你可以做一个简单的测试,就像我一样,这有用:
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$title = "Jérôme";
echo $title."<br>";
但元标记的位置在head标记中。 HTML文档应如下所示:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>An XHTML 1.0 Strict standard template</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
<?php
$title = "Jérôme";
echo $title."<br>";
?>
这是标准的。
答案 3 :(得分:0)
在你的第二个例子/步骤中:
$res[] = array_map('utf8_encode', $row);
看起来您正试图在UTF-8
中编码不 ISO-8859-1
。
您应该检测/知道来自数据库的编码是什么,并将其正确转码为UTF-8
,例如iconv
。
作为替代方案,你应该知道:
<meta charset="utf-8">
如果可能,请将以上所有内容移至UTF-8
...