UTF-8 Unicode karakter saklayabilirsiniz. Seninkodlamamod ISO-8859-1 veya Windows 1252 dahil olmak üzere bütün başka bir şey ise, UTF-8 içinde her karakter saklayabilirsiniz. Yani UTF-8 için başka bir kodlama bir dize dönüştürmek olduğunda herhangi bir karakter kaybetme konusunda endişelenmenize gerek yok.
Ayrıca, ISO-8859-1 ve Windows-1252 hem de herhangi bir bayt geçerlidir tek baytlık kodlamaları vardır. Bu onları ayırt etmek teknik olarak mümkün değildir. Farklı çözmek sadece bayt aralığı 0x80-0x9F olduğu gibi, non-UTF-8 dizileri için varsayılan maç olarak Windows 1252 seçti. ISO-8859-1 hemen hemen hiç kullanılmamış olan görünmez kontrol karakterleridir ise akıllı tırnaklar ve Windows 1252 yılında Euro gibi çeşitli karakterler bu decode,. Web tarayıcıları bazen ISO-8859-1 kullanılarak, ama genellikle gerçekten Windows 1252 kullanarak olacaktır söyleyebiliriz.
Bu kod UTF-8 kodlu belgeye eklemek için bir dize güvenli olduğundan emin olmak istiyorum
Kesinlikle bu amaçla TRUE isteğe bağlı 'sıkı' parametresini ayarlamak isterim. Ama bu aslında tüm geçersiz UTF-8 dizileri kapsar emin değilim. Fonksiyonu açıkça UTF-8 geçerliliği için bir bayt dizisi kontrol etmek iddiasında değildir. Hala sıkı modunda olabilir eğer ben bilmiyorum ama, mb_detect_encoding hatalı önce UTF-8 tahmin ediyorum bilinen olgu olmuştur.
Eğer emin olmak istiyorsanız, W3-recommended regex kullanarak kendiniz yapın:
if (preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string))
return $string;
else
return iconv('CP1252', 'UTF-8', $string);