2014年1月15日 星期三

PHP 去除 ASCII 控制字元

Last updated on Jan 15th, 2014 by Sam Lin <samlin35@gmail.com>

在寫一段 PHP 將檔案每一行讀出來並且用 XML 輸出的程式,結果意外地出現了錯誤。我將該行寫成 xml 並使用瀏覽器來看,顯示錯誤如下圖。




使用 wget 將 test.xml 抓了下來,使用編輯器顯示其 hex,如下:


從上圖看到反白的字元 1F 恍然大悟,原來是 ASCII 的特殊字元所造成 xml 顯示錯誤。從 Wikipedia ASCII 可以知道從 0x00 到 0x 1F 都是 ASCII 的控制字元,所以如果我們要用 PHP 輸出的話,最好先過濾掉這些字元。要過濾的話,可以使用 preg_replace 這個 function 。

範例如下,

$output = preg_replace('/[^(\x20-\x7F)]*/','', htmlspecialchars($dumpstring));
echo $output;

沒有留言: