2013-04-12 84 views
12

我通过PHP数组等度'°'字符不显示在php json_encode函数中,如何显示?

[sit_latitude] => 20° 23.298' N 

内部json_encode();并输出就像,

{"sit_latitude":null} 

它的显示为空,如何解决这个问题?

我的代码片段

... 
$stmt->bindParam("id", $_GET[id]); 
$stmt->execute(); 
$employee = $stmt->fetchObject(); 
$dbh = null; 
echo '{"item":'. json_encode($employee) .'}'; 
+4

请邮寄真正的PHP代码和地区配置。 – arkascha

+0

我的猜测是你的文件没有保存为UTF-8。 –

回答

10

我的尝试并取得成功有点奇怪,但工作,让我与你分享。

$latitude = json_encode(utf8_encode($emplyoee['sit_latitude'])); 
$longitude = json_encode(utf8_encode($employee['sit_longitude'])); 

    $emplyoee['sit_latitude'] = $latitude; 
    $emplyoee['sit_longitude'] = $longitude; 

现在传似

echo '{"item":'. json_encode($employee) .'}'; 

这将解决你的问题

4

json_encode假定其输入中的字符串有效UTF-8(请记住,PHP字符串是字节序列,而不是Unicode代码点序列)。如果您的文本编辑器没有设置为使用该编码(并且您还没有使用十六进制转义码在双引号字符串中使用十六进制转义码(例如\xc2\xb0)手动生成UTF-8),则该字符串将被编码为null(因为它不是有效的UTF-8)。

其他常见字符集,如Windows-1252也是ASCII的超集,所以如果有非ASCII字符(包括U + 00B0 DEGREE SIGN),这只是一个问题。

即使字符串是有效的UTF-8,默认情况下,json_encode将输出\u00b0而不是实际的度数符号。这对使用PHP json_decode或JavaScript JSON.parse进行编程解码不是问题,它可以理解JSON十六进制转义序列。在PHP 5.4中,有一个JSON_UNESCAPED_UNICODE标志可以防止这种转义,但是,许多Web服务器仍然使用PHP 5.3或更旧版本,并且标志甚至是有问题的字符U + 2028 LINE SEPARATOR和U + 2029 PARAGRAPH SEPARATOR它可以模拟两行代码的标志,但正如我上面所解释的,你不必反正。)

-4

你可以尝试用htmlspecialchars()函数http://php.net/manual/en/function.htmlspecialchars.php

+0

请注意,JSON不是HTML。 –

+0

htmlspecialchars根本不逃避度数标志,所以它不会帮助。事实上,在PHP 5.4安装中,函数甚至可能会为提问者返回一个空字符串(因为UTF-8无效)。 – PleaseStand