Geçenlerde bir arkadaşım ile tamamlanmış bir web sitesi, bir resim ve metin dosyalarını yükleyebilirsiniz bir galerisi var. Sadece kabul edilen metin dosyası (geliştirme kolaylaştırmak için). Txt ve normal bir aksama olmadan söner (veya değil ..)
Microsoft'un Genişletilmiş ASCII: ben karşılaştığınız sorunlar herhangi bir geliştirici aynıdır.
Dosyasından metin çıktısı önce, bunu temizlemek için denemek için birkaç farklı katmanları üzerinden gitmek:
$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 çıkışı için normal ASCII eşdeğerleri Microsoft'un korkunç akıllı tırnaklar, em-çizgi, üç nokta ve dönüştürme genel yöntemdir.
Bu kod mükemmel yüklenen dosya ANSI / us-ascii olduğu koşul altında bulmak çalışır.
Yüklenen dosya UTF-8 olduğunda bu kod (özel bir nedeni yok) çalışmıyor.
Dosya web tarayıcısında dosyasını kendisi görüntüleme, UTF-8 olduğu zaman çalışıyor, ama bu kodu kullanarak web arayüzü üzerinden dışarı baskı yok. Bu olay, akıllı tırnaklar çeşit bir karakter aksanlı haline.
Ben şaşırıp yerdir. Web sayfası için çıkış kodlama web tarayıcısı UTF-8 olarak görüyor, UTF-8, dosya UTF-8 olduğunu ve henüz ne akıllı tırnaklar için değiştirin çalışıyor ne de web tarayıcısı onları doğru görüntülemek yok.
Bu herhangi bir ve tüm yardım büyük mutluluk duyacağız.