htmlentitiesi 'Geçersiz çokbaytlı' hatası

6 Cevap

Ben bir 'Geçersiz çokbaytlı' hatası nereden PHP'nin htmlentities fonksiyonu sayesinde bir dize çalıştırmak için çalışırken, bazı durumlarda var. Meydana gelen bu hatayı önlemek için işlevi çağırmadan önce dize temizlemek için bir yolu var mı?

6 Cevap

Ben UTF-8 belirtmek için yeterli değildir senaryoları karşılaştı ve ENT_IGNORE seçenek yararlı buldum. Ben sadece htmlspecialchars'dan için, bu Htmlentities için dokümante sanmıyorum ama bu hatayı boğucu çalışır.

PHP 5.4 gibi düzgün çıkış kaçmak için aşağıda boyunca bir şey kullanmak gerekir:

$escapedString = htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML5, $stringEncoding);

ENT_SUBSTITUTE (yerine boş bir dize dönen) tarafından geçersiz kod dizilimleri değiştirir.

ENT_DISALLOWED ile belirtilen doctype geçersizdir kod noktalarını değiştirir.

ENT_HTML5 kullanılan bir doküman türü belirtir. Eğer ENT_HTML401, ENT_XHTML veya ENT_XML1 seçebilirsiniz kullandığınız ne bağlı.

Eğer sonuç ne olursa olsun olsun abominated giriş tür, verilen belge türüne her zaman geçerli olduğundan emin olun bu seçenekleri kullanma.

Ayrıca, $stringEncoding belirtmek unutmayın. Varsayılan dayanarak bu ini ayarları ve sürümleri arasında olabilir (ve yaptım) değişim bağlı olarak kötü bir fikirdir.

In general the php ini setting display_errors can be used to control whether errors are output to the browser, the ini setting log_errors can be independently used to control whether errors are written to logfile, and if a custom error handler has been set with set_error_handler() then this is always called for all errors and can then read the values of display_errors and log_errors along with the value of error_reporting() and take the appropriate course of action, right?

Wrong! In this case, htmlspecialchars() and htmlentities() only trigger the error if the value of display_errors is false. If the value of display_errors is true then no error is triggered at all! This seemingly nonsensical behaviour makes it impossible to detect these errors during debugging with display_errors on.

I got the information from here

HTML_ENTITIES ($ değişken, ENT_QUOTES); her zaman benim için gayet güzel çalışıyor.

UTF-8 kullanarak multibyte dize işlevlerini sağlayan gerektirdiğini unutmayın. Bu php mb eşdeğer olan fonksiyonların aşırı yüklenmesi açmak için ayarı ini bir php sağlar dışında, mb_substr ile substr gibi fonksiyonları yerine anlamına gelebilir.

Daha fazla ayrıntı için buraya bakınız: http://www.php.net/manual/en/mbstring.overload.php