2011-08-04 64 views
3

我想寫一些內容到一個XML文件,但我確實有特殊字符的問題。PHP SimpleXML asXML寫ANSI編碼文件

我想寫通過$_GET提交給腳本的內容,所以我認爲它是正確解碼爲UTF-8的內容。

$write = $_GET['content']; 

將被輸入,如:

file.php?content=s%F6per 

在PHP我執行以下操作:

$xml = simplexml_load_file('file.xml'); 
$newentry = $xml -> addChild('element',$write); 
$xml -> asXML($xml_filename); 

被打開XML文件是UTF-8編碼。當我寫入沒有任何「問題字符」的內容時,asXML將再次以UTF-8格式保存文件。只要我插入特殊字符,它就會以ANSI編碼保存,搞亂了文件,因爲我無法打開它(腳本會抱怨不正確的編碼)了。

我錯過了什麼?閱讀手冊給我的印象是,我應該做的一切正常(即不要搞亂$_GET['content']),所以我不幸沒有任何線索。

非常感謝!

回答

2

您的特殊字符不看一個UTF-8,但ISO-8859-1字符

在這裏看到的 - http://www.degraeve.com/reference/urlencoding.php

可能的解決方法

$newentry = $xml->addChild('element', htmlentities($write)); 

或者

$newentry = $xml->addChild('element', iconv('ISO-8859-1', 'UTF-8', $write)); 

偏題,請避免使用$_GET來寫處理文件或插入數據庫,有風險

+0

謝謝!儘管我仍然不明白爲什麼URL編碼的特殊字符會被轉換爲ISO-8859-1而不是UTF-8(當我的PHP文件是UTF-8時)。反正謝謝! – m90

+0

只是因爲輸入不是UTF-8,也許你需要檢查你如何構建'$ _GET' – ajreal

+0

但是我如何編碼一個查詢字符串呢?感謝您的安全提示,我意識到這一點,並「已採取措施」。 – m90