我最近與朋友一起完成的一個網站上有一個可以上載圖像和文本文件的圖庫。唯一可接受的文本文件(以簡化開發)是.txt和正常熄滅順利(或不..)在文件上傳中處理擴展ASCII
我遇到的問題是一樣的,任何開發人員的:微軟的擴展ASCII。
從文件輸出文本之前,我去了幾個不同的層,試圖把它清理乾淨:
$txtfile = file_get_contents(".".$this->var['submission']['file_loc']);
// BOM Fun
$boms = array
(
"utf8" => array(3,pack("CCC",0xEF,0xBB,0xBF)),
"utf16be" => array(2,pack("CC",0xFE,0xFF)),
"utf16le" => array(2,pack("CC",0xFF,0xFE)),
"utf32be" => array(4,pack("CCCC",0x00,0x00,0xFE,0xFF)),
"utf32le" => array(4,pack("CCCC",0xFF,0xFE,0x00,0x00)),
"gb18030" => array(4,pack("CCCC",0x84,0x31,0x95,0x33))
);
foreach($boms as $bom)
{
if(mb_substr($txtfile,0,$bom[0]) == $bom[1])
{
$txtfile = substr($txtfile,$bom[0]);
break;
}
}
$txtfile_o = $txtfile;
$badwords = array(chr(145),chr(146),chr(147),chr(148),chr(151),chr(133));
$fixwords = array("'","'",'"','"','-','...');
$txtfile_o = str_replace($badwords,$fixwords,$txtfile_o);
$txtfile_o = mb_convert_encoding($txtfile_o,"UTF-8");
的str_replace函數是將微軟的可怕的智能引號,破折號的一般方法,以及省略號轉換爲它們的正常ASCII等值用於輸出。
此代碼的工作完全是上傳的文件是ANSI/US-ASCII的情況下找到。
此代碼不能正常工作(沒有特殊原因)時,上傳的文件是UTF-8。
當該文件是UTF-8,查看文件本身在網絡瀏覽器工作正常,但打印出來通過使用此代碼的Web界面不。在這種情況下,這些巧妙的語錄變成某種角色的重音。
這是我卡住的地方。網頁的輸出編碼是UTF-8,網頁瀏覽器將其視爲UTF-8,文件使用UTF-8,但無論是替換智能引號還是Web瀏覽器都無法正確顯示它們。
任何和所有這方面的幫助將不勝感激。
問題是,mb_convert($ string,「UTF-8」);如果你傳遞一個UTF-8字符串的話,實際上會把語法搞砸了。它不能將UTF-8轉換爲UTF-8而沒有可怕的結果。 – Navarr 2010-06-23 23:14:05