2013-04-12 81 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