PHP UTF-8 olarak non-UTF-8-form alanları alın?

7 Cevap php

Ben bir formu (Windows-1251 yılında aslında) non-UTF-8 servis var. İnsanlar, tabii ki, orada yazılan herhangi bir karakter onlar gibi. Tarayıcı yardımsever ben hala onları tanıyabilir varlıkları html içine çıkamaz-in-Windows-1251 karakter dönüştürür. Örneğin, kullanıcı türlerine bir → eğer, ben bir → alırsınız. Ben sadece geri echo eğer kısmen harika, gibi, tarayıcı doğru ne olursa olsun → gösterecektir.

Sorun aslında görüntülemeden önce metin üzerinde htmlspecialchars () yapmak, (bu HTML varlıklar, örneğin & olur özel karakterleri dönüştürmek için bir PHP fonksiyonu var &). Benim kullanıcılar bazen — veya © gibi şeyler yazın, ve ben gerçek — veya ©, değil onları görüntülemek istediğiniz - ve © .

I → olarak hem olsun çünkü beni → bir → ayırt etmek için hiçbir yolu var,. Ve, ben htmlspecialchars'dan beri () metin, and Ben de tarayıcıdan bir → bir → olsun, ben {olarak görüntülenen alır bir → geri hangi echo [(0)]} bir tarayıcıda. Yani kullanıcının giriş bozulmuş olur.

"Tamam, Windows 1251 yılında bu formu hizmet, ama you sadece UTF-8 bana girdi göndermek ve bana onunla kendimi anlaşma izin lütfen olacaktır:" demek için bir yolu var mı?

Oh, ben iyi bir fikir UTF-8 için tüm yazılım geçiş olduğunu biliyorum, ama bu sadece çok iş olduğunu ve bunun için hızlı bir düzeltme almak için mutlu olurdu. Bu konularda, formun enctype "multipart / form-data" dir (dosya aktarıcı içerir, bu nedenle başka bir EncType kullanamazsınız). Apache ve PHP kullanmak.

Teşekkürler!

7 Cevap

Tarayıcı yardımsever varlıkları html içine çıkamaz-in-Windows-1251 karakter dönüştürür

Eh, neredeyse, hiç yararlı değil dışında. Şimdi gerçek arasındaki farkı söyleyemem "ƛ" Birisi bunun bir '&' ile bir metin dizesi olarak çıkıp bekliyor ve 'Б' karakteri yazdığınız söyledi.

Ben aslında görüntülemeden önce metin üzerinde htmlspecialchars () yapmak

Evet. Bunu yapmanız gerekir, ya da başka bir güvenlik sorunu var.

Tamam, Windows-1251 yılında bu formu hizmet, ama sen memnun edecek sadece kendimi UTF-8 bana girdi göndermek ve bana onunla başa izin

Evet, sözde form etiketinde "accept-charset =" UTF-8 "" gönderin. Ama gerçek IE çalışmıyor olmasıdır. UTF-8 bir form almak için, UTF-8 bir formu (sayfa) göndermeniz gerekir.

Ben, iyi bir fikir UTF-8 için tüm yazılım geçiş olduğunu biliyorum

Evet. Eh, en azından formunu içeren sayfanın kodlaması UTF-8 olmalıdır.

<form action="action.php" method="get" accept-charset="UTF-8">
    <!-- some elements -->
</form>

Bütün tarayıcılar accept-charset belirtilen kodlama değerleri dönmelidir.

Sen karakterler belirli bir aralık içinde olup olmadığını görmek için kontrol edin. Onlar standart UTF-8 karakter aralığının dışında kalırsa, onunla ne yapmak istiyorsan. Ben her karakter & #, 8, 5, 9, 4 bakıyor, ve size bir şey uygulayabileceğiniz bir şey haline ayrıştırma bu yapardı.

Birisi UTF-8 dönüştürme komut dosyası için bir Windows-1251 yarattı yerde bulma kısa, muhtemelen kendi rulo zorunda olacak. Muhtemelen her özel karakter bakmak ve onunla yapılması gerekenleri görmek zorunda olacak. Bu © gibi bir şey varsa Eğer daha farklı ele isteyeceksiniz → ikincisi içindeki # sahip bulunmaktadır.

Ben bu soruyu yanıtladığını düşünüyor.

Sen false yeniden kodlanan karakter başvuruları önlemek mi PHP 5.2.3 'ten beri), htmlspecialchars fonksiyonu (double_encode dördüncü parametreyi ayarlamak olabilir.

Yoksa önce bu mevcut karakter başvuruları çözmek.

Onlar aynı bakmak çünkü bir varlık bir varlık ve kullanıcıların yazarak bir kodlaması altında dönüştürme tarayıcısı ayırt etmek mümkün olmayacaktır. Gerçek çözüm, Windows 1251 kadar vermektir. Yerine, UTF-8 web sayfası ve formu hizmet UTF-8 kodlama için sormak ve tüm bu sorunlar sadece gitmek gerekir.