2
把這個簡單的PHP代碼:與XMLWriter的(PHP)的編碼問題
$xmlWriter = new XMLWriter();
$xmlWriter->openURI('php://output');
$xmlWriter->startDocument('1.0', 'utf-8');
$xmlWriter->writeElement('test', $data);
$xmlWriter->endDocument();
$xmlWriter->flush();
XMLWriter的類有一個很好的功能:它會轉換你給它的輸出編碼的任何數據。例如,在這裏它會將$data
轉換爲UTF-8,因爲我在startDocument
函數中通過了'utf-8'
。
的問題是,在我的情況下$data
內容來自數據庫,其輸出格式爲UTF-8和因此已經在UTF-8。 XMLWriter 可能認爲數據在ISO-8859-1中,並再次將其轉換爲UTF-8,並且我得到奇怪的符號,我應該在其中獲得重音。
目前我正在使用來自數據庫的每個字符串周圍的utf8_decode
,這意味着我將從UTF-8轉換爲ISO-8859-1,然後XMLWriter將其重新轉換爲UTF-8。
這工作,但不乾淨:
$xmlWriter->writeElement('test', utf8_decode($data));
是否有一個清晰的解決方案?
編輯:展示一個完整的例子
$xmlWriter = new XMLWriter();
$xmlWriter->openURI('php://output');
$xmlWriter->startDocument('1.0', 'utf-8');
$xmlWriter->startElement('usersList');
$database = new PDO('mysql:host=localhost;dbname=xxxxx', 'xxxxx', 'xxxxx');
$database->exec('SET CHARACTER SET UTF8');
$database->exec('SET NAMES UTF8');
foreach ($database->query('SELECT name FROM usersList') as $user)
$xmlWriter->writeElement('user', $user[0]); // if the user's name is 'hervé' in the database, it will print 'hervé' instead
$xmlWriter->endElement();
$xmlWriter->endDocument();
$xmlWriter->flush();
請問您能否顯示$ data的來源? (包括查詢) – Manuel 2012-04-16 14:38:35