2010-07-29 64 views
1

我使用MySQL數據庫在PHP中製作KSSN(韓文ID號碼)檢查器。 我通過使用file_get_contents調用外部網站來檢查它是否正在工作。如何讓PHP使用正確的字符集?

問題是請求(與他們的韓文/韓文字符)正在使用錯誤的字符集。 當我回顯字符串時,韓文字符會被問號所代替。

我該如何使用韓語?我是否應該更改數據庫中的任何內容? 字符集應該是什麼?

PHP源代碼和SQL轉儲:http://www.multiupload.com/RJ93RASZ31

注:我使用的Apache(HTML),不CLI。

+2

什麼是數據庫字符集? 什麼是你的文件字符集? 你的控制檯字符集是什麼? – 2010-07-29 09:28:27

+0

添加了PHP源代碼和SQL轉儲,請看看它們。 – lesderid 2010-07-29 09:30:47

+0

PHP與charsets很少有關係。我主要是數據庫/ html責任 – 2010-07-29 09:32:13

回答

2

您需要:

  1. 告訴瀏覽您希望收到的表單提交,通過設置由頭部Content-Type<meta>在特拉維夫的答案是什麼編碼。

  2. 使用mysql_set_charset()告訴數據庫你正在發送什麼編碼字節。

當前您在數據庫中使用EUC-KR,因此大概您希望在上述兩點中使用該編碼。在本世紀,我會建議在所有的網絡應用/數據庫中使用UTF-8,因爲東亞多字節編碼是一個不合時宜的錯誤。 (隨着潛在的安全隱患,因爲如果mysql_real_escape_string不知道正確的編碼,將含有'\可以通過SQL注入潛入一個多字節序列。)

然而,如果enpang.com使用EUC-KR對於編碼在Name URL參數中,您需要使用EUC-KR,或者使用iconv()將名稱值從UTF-8轉換爲EUC-KR。 (我不清楚enpang.com是使用URL參數對其名稱檢查服務進行編碼的,我總是得到相同的結果。)

+0

恩,那就是問題所在。我不知道他們正在使用哪種編碼.. – lesderid 2010-07-29 09:58:07

+1

是否在任何地方記錄了Web服務? – bobince 2010-07-29 09:58:48

+0

我不這麼認爲。然而,這是在他們的註冊頁面上使用的:http://join.enpang.com/member/joinStep1.asp 我剛剛檢查,該頁面正在使用euc-kr。 – lesderid 2010-07-29 10:02:45

1

我不知道的字符集,但如果您使用HTML來顯示結果,你應該設置HTML

 <META http-equiv="Content-Type" content="text/html; charset=EUC-JP"> 

您也可以使用iconv(PHP函數)的字符集的字符集轉換到不同的字符集 http://php.net/manual/en/book.iconv.php

最後但並非最不重要的,檢查您的數據庫編碼的表。

但我想你的情況下,你只需要改變元標記。

+1

實際上meta標籤無能爲力。它必須是** HTTP **標題,而不是http-equiv替代品 – 2010-07-29 09:34:11

+1

@Col:?您可以*更改瀏覽器從中使用的字符集。這就是整個問題。發送一個精確的'Content-Type'頭文件*也是一個好主意。 – bobince 2010-07-29 09:41:57

+2

''僅在真實HTTP標頭*缺失*時使用。 – Quentin 2010-07-29 09:47:23

1

基本上所有的字符集問題都源於它們被混合和/或曲解的事實。

字符串(文本)是按特定順序的字節序列。字符串使用一些特定的字符集進行編碼,本身既不是正確也不是錯誤,也不是其他任何東西。問題是當你試圖讀取字符串,字節序列,假設錯誤的字符集。例如,使用KS X 1001進行編碼的字節在讀取它們時假定它們是UTF-8就沒有意義,這就是問號的來源。

您從中獲得文本的網站會將其發送給您,並以某些特定字符集爲例,假設您使用的是KS X 1001.假設您的網站使用UTF-8。在UTF-8編碼文本的中間嵌入代表KS X 1001編碼文本的字節流,並告知瀏覽器將整個站點解釋爲UTF-8,這導致KS X 1001編碼文本對UTF-8解析器沒有意義。

UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 
KSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKSKS 
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 

將呈現爲

Hey, this is UTF-8 encoded text, awesome! 
???????I?have?no?idea?what?this?is??????? 
Hey, this is UTF-8 encoded text, awesome! 

爲了解決這個問題,convert所獲取的文本爲UTF-8(或您在使用網站上的任何編碼)。看看其他網站的Content-Type標題,它應該告訴你網站是什麼編碼。如果不是,請猜測。

相關問題