2011-11-23 84 views
1

不幸的是,我遇到了一些麻煩與PHP薩克斯解析器和utf-8編碼。PHP薩克斯解析器和UTF-8

的情況下:

我有一個以UTF-8編碼的XML文件。該文件使用標準的php薩克斯解析器進行解析。數據存儲在一些容器對象中並插入到mysql數據庫中。不幸的是,某些字符在數據庫中看起來很奇怪(主要是德語)。例如Gürtel看起來像Gürtel。

下面的代碼片段顯示解析器如何實例:

$saxParser = xml_parser_create("UTF-8"); 

這是否足以解析UTF-8的文件?如果是的話,我錯過了什麼?一些特殊的數據庫的東西插入時?

在此先感謝。

+2

您的數據庫文本列有什麼文章?你有沒有使用'''''UTF8''來設置MySQL編碼爲UTF-8? – CodeZombie

+0

@ ZombieHunter我的排序規則是utf8_general_ci – Dennis

回答

1

檢查編碼步步找到無效代碼:

  1. 打印的價值,你從XML
  2. 打印出來的SQL語句retrive你建立

打印時的值,請確保您的瀏覽器使用正確的編碼讀取輸出。

你必須確保每個組件使用正確的編碼:

PHP腳本

保存你的PHP設置爲UTF-8 BOM編碼,因爲這可能會導致問題。處理UTF-8字符串時僅使用multibyte string functions

XML文件

XML文件開始與 <?xml version="1.0" encoding="UTF-8" ?> 和文件被正確保存設置爲UTF-8編碼。

SQL列(核)

VARCHAR(length) [CHARACTER SET charset_name] [COLLATE collation_name] 

MySQL服務器和PHP腳本打開與MySQL服務器的連接之後

運行此命令之間的通信:

SET NAMES 'UTF8' 

SET NAMES表示客戶端將用於將SQL 語句發送到服務器的字符集。 http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

+0

感謝你,我有可能弄清楚這些陳述沒有被嚴格編碼。 「SET NAME'UTF8'」修復了這個問題。非常感謝! – Dennis