Ben UTF-8 hakkında bilmek her şeyin doğru olduğundan emin olmak istiyorum. Ben şimdi bir süre için UTF-8 kullanmak için çalışıyorlar ama ben daha çok böcek ve% 100 UTF-8 sitesine sahip olmak neredeyse imkansız görünüyor yapmak diğer garip şeyler karşısında tökezleyerek devam. Ben kaçırmak gibi bir yakaladım yerde her zaman vardır. Belki burada birisi bu yüzden önemli bir şey kaçırmayın listemi veya Tamam düzeltebilirsiniz.
Database
Her sitenin bir yerde orada veri depolamak için vardır. Olursa olsun PHP ayarlarının ne de DB yapılandırmanız gerekir. Eğer yapılandırma dosyalarını erişemiyorsanız sonra emin olmak için "SET NAMES 'utf8'" olarak takmaz. Ayrıca, tüm tabloları üzerinde utf8_ unicode_ ci kullandığınızdan emin olun. Bu veritabanı için MySQL varsayar, başkaları için değiştirmek zorunda kalacak.
Regex
Ben ortalama arama yerine daha more complex olan regexdeki bir sürü yapmak. Ben böylece "/ u" değiştirici kullanmak hatırlamak zorunda PCRE doesn't corrupt my strings. Yine de, hatta daha sonra orada still problems apparently.
String Functions
(Vs strlen (), strpos ()) varsayılan dize tüm fonksiyonları yerine byte karakter bakmak Multibyte String Functions Bunun değiştirilmesi gerekir.
Headers You should make sure that your server is returning the correct header for the browser to know what charset you are trying to use (just like you must tell MySQL).
header('Content-Type: text/html; charset=utf-8');
Bu doğru koymak için de iyi bir fikirdir < meta> sayfa kafasına etiketi. Gerçek başlık bu geçersiz olacak olsa da farklı olmalıdır.
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
Questions
Ben UTF-8 için kullanıcı aracısı (HTML form en & URI) aldığınız her şeyi dönüştürmek için gereken ne zaman, sayfa yüklenirken veya onlar gibi sadece dizeleri / değerleri bırakmak ve hala olmadan bu fonksiyonlar aracılığıyla çalıştırabilirsiniz eğer Sorun?
Ben UTF-8 için her şeyi dönüştürmek için ihtiyacınız yoksa - o zaman ne adımlar atmalıyım? mb_detect_encoding Bunun için inşa edilecek gibi görünüyor ama insanlar her zaman çalışmıyor şikayetçi görmeye devam. mb_check_encoding, aynı zamanda bozuk bir iyi bir UTF-8 dizesi söylüyorum bir sorun var gibi görünüyor.
Does PHP store strings in memory differently depending on what encoding it is using (like file types) or is it still stored like a regular sting with some of the chars being interpreted differently (like & amp; vs & in HTML). chazomaticus Bu soru cevaplar:
In PHP (up to PHP5, anyway), strings are just sequences of bytes. There is no implied or explicit character set associated with them; that's something the programmer must keep track of.
A MB_ * işlevi olmayan bir UTF-8 dizesi verirseniz hiç bir sorun neden olur?
UTF dize yanlış kodlanmış ise irade şey (? Regex bir ayrıştırma hatası gibi) yanlış ya da sadece kötü bir varlık (html) işaretlemek olacak? Yanlış kodlanmış dizeleri dize kötü çünkü işlev FALSE dönen neden olacak bir şans hiç var mı?
Ben size de UTF-8 olarak oluşturur (accept-charset = "UTF-8") ama yararı nedir emin değilim işaretlemek gerektiğini duydum ..?
UTF-16 UTF-8 bir sınırı gidermek için yazılmıştır? Gibi karakterler için dışarı alanı UTF-8 run mi? (Y2 (UTF) k?)
Functions
İşte ben buldum ama onlar aslında çalışmaya doğrulamak için herhangi bir şekilde değil olması özel PHP işlevlerinin bir çift vardır. Belki birisi ben kullanabileceğiniz bir örnek vardır. İlk convertToUTF8() ve daha sonra wordpress gelen seems_utf8.
function seems_utf8($str) {
$length = strlen($str);
for ($i=0; $i < $length; $i++) {
$c = ord($str[$i]);
if ($c < 0x80) $n = 0; # 0bbbbbbb
elseif (($c & 0xE0) == 0xC0) $n=1; # 110bbbbb
elseif (($c & 0xF0) == 0xE0) $n=2; # 1110bbbb
elseif (($c & 0xF8) == 0xF0) $n=3; # 11110bbb
elseif (($c & 0xFC) == 0xF8) $n=4; # 111110bb
elseif (($c & 0xFE) == 0xFC) $n=5; # 1111110b
else return false; # Does not match any model
for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80))
return false;
}
}
return true;
}
function is_utf8($str) {
$c=0; $b=0;
$bits=0;
$len=strlen($str);
for($i=0; $i<$len; $i++){
$c=ord($str[$i]);
if($c > 128){
if(($c >= 254)) return false;
elseif($c >= 252) $bits=6;
elseif($c >= 248) $bits=5;
elseif($c >= 240) $bits=4;
elseif($c >= 224) $bits=3;
elseif($c >= 192) $bits=2;
else return false;
if(($i+$bits) > $len) return false;
while($bits > 1){
$i++;
$b=ord($str[$i]);
if($b < 128 || $b > 191) return false;
$bits--;
}
}
}
return true;
}
Herkes ilgi ise ben kullanmak için harika bir örnek sayfa bulunamadı when testing UTf-8.