Ben bir URL dize kullanılabilir hale getirmek için ilk adım olarak PHP dizesindeki karakter Aksan kaldırmak için çalışılıyor.
Ben aşağıdaki kodu kullanarak ediyorum:
$input = "Fóø Bår";
setlocale(LC_ALL, "en_US.utf8");
$output = iconv("utf-8", "ascii//TRANSLIT", $input);
print($output);
Ben beklediğiniz çıkışı böyle bir şey olacaktır:
F'oo Bar
Yerine aksanlı karakterler dönüştürülmüş olmanın Ancak, soru işaretleri ile değiştirilir:
F?? B?r
Ben online bulabilirsiniz her şeyi ancak ben zaten yapıyorum, yerel ayarı bu sorunu çözecektir gösterir. Zaten aşağıdaki ayrıntıları kontrol ettik:
- Ben kuruyorum yerel (
locale -a
tarafından üretilen listesine dahil) sunucusu tarafından desteklenmektedir - Kaynak ve hedef kodlamaları (UTF-8 ve ASCII) (tarafından üretilen listede yer
iconv -l
) iconv sunucunun sürümü tarafından desteklenmektedir - Giriş dizesi UTF-8 kodlanmış (answer by mercator önerildiği gibi, PHP'nin
mb_check_encoding
fonksiyonunu kullanarak doğrulanmadı) olduğunu setlocale
için çağrı (döndürür'en_US.utf8'
yerineFALSE
) başarılı
The cause of the problem:
Sunucu iconv yanlış uygulamasını kullanıyor. Bu glibc sürümü yerine gerekli libiconv sürümü vardır.
Note that the iconv function on some systems may not work as you expect. In such case, it'd be a good idea to install the GNU libiconv library. It will most likely end up with more consistent results.
– PHP manual's introduction to iconv
PHP tarafından kullanılan iconv uygulanması ile ilgili detaylar phpinfo
fonksiyonu çıkışında yer almaktadır.
(Ben aşağıda kabul ettik cevap iconv desteği olmadan aksan kaldırmak için en yararlı biridir yüzden ben bu proje için çalışıyorum sunucuda doğru iconv kütüphane ile yeniden derlemek PHP mümkün değilim.)