2010-09-06 213 views
2

我有問題! 我想在PHP中打印一個unicode字符串(如'سلام')! 但是當我使用回聲只有一些? apear!Unicode字符串php

我該怎麼辦? 這種情況發生時,我想選擇從數據庫中檢索的字符串!

echo 'سلام'; 

結果是:

???? 

我試圖用頭功能,但沒有幫助我!

+0

你指定合適的字符編碼? – Gumbo 2010-09-06 10:42:49

+0

不知道爲什麼這是倒票,這個問題是完全有效的。我終於找到工作的解決方案是在這裏:http://stackoverflow.com/questions/2446778/how-to-display-unicode-data-with-php – Wex 2012-03-19 12:26:23

回答

6

你需要做三件事情:

  1. 確保您收到的數據爲UTF-8的數據。對於MySQL,在選擇記錄之前查詢SET NAMES 'utf8'
  2. 確保在處理UTF-8字符串時使用的是UTF-8兼容函數。
  3. 確保您將輸出編碼設置爲UTF-8。對於HTML,可以通過將Content-type HTTP標頭設置爲(例如)text/html; charset=utf-8來完成此操作。

當然,用任何你想要的編碼來替換「UTF-8」,它支持你需要的字符。沒有必要更改數據庫表(可能的性能增益除外)。如果您決定使用UTF-16或其他不是(大部分)ASCII兼容的東西,則可能需要更改HTML模板等。

+0

如果你打算在mysql中存儲unicode數據,你需要使用支持它的字符集。默認情況下,Mysql使用latin1,但可以切換到utf-8。 – troelskn 2010-09-06 11:07:59

+0

@troelskn,我假設數據已經正確存儲。我提到了更改數據庫表,因爲如果站點切換到UTF-16,數據庫的數據字符集不需要更改,因爲轉換是爲您完成的。 – strager 2010-09-06 11:32:14

2

您需要在HTTP響應中聲明使用的字符編碼。您可以使用header function

header('Content-Type: text/html;charset=utf-8'); 

有了這個輸出是被宣佈爲HTML與字符編碼UTF-8。請注意,如果您已經將數據發送到客戶端而不進行緩衝,則不能使用header。因此,使用output control緩衝輸出,以便可以修改標題,儘管已經有一些輸出或在任何輸出之前使用header

+0

非常感謝,但正如我所說,它沒有工作! ! – undone 2010-09-06 10:37:18

0

也許我有點爲時已晚,但這個工作對我來說:

echo utf8_encode('سلام');