Bir PHP / MySQL CMS öncesi ve sonrası işleme dilli kullanıcı girişi için en iyi yöntem

4 Cevap php

Tamam, bir ton malzeme hijyen dizeleri orada ama çok az, ben filtre sonra nasıl bir içerik yönetim sistemi içine sokmak için (şimdi yazdıklarım gibi) kullanıcı girişi hazırlamak için en iyi yöntemleri, bulabilirsiniz dışarı geliyor.

Ben iki dilli (Japonca, İngilizce + diğer Roman dilleri) bina ile sizin ve ® gibi özel karakterleri hem alma ile bir zaman bir halt yaşıyorum, ™, Japonca karakterler ile birlikte görüntülemek için.

Ben çok tutarsız sonuçlar almaya devam.

Ben UTF-8 için her şeyi belirledik:

web sayfası: ve

. Htaccess dosyası: AddDefaultCharset UTF-8 VE (sorunu zorlamak için)

Her db bağlantısından sonra: mysql_query ("SET adları 'UTF8'");

Her veritabanı, tablo ve alan da utf8_general_ci ayarlanır

Magic tırnak kapalı. Ben htmlpurifier varsayılan ayarları ile ilk kullanıcı girişi önişlem, daha sonra bunun üzerinde bu işlevi çalıştırın:

function html_encode($var) {

    	// Encodes HTML safely for UTF-8. Use instead of htmlentities.
    	$var = htmlentities($var, ENT_QUOTES, 'UTF-8');

    	// convert pesky special characters to unicode
    	$look = array('™', '™','®','®');
    	$safe = array('™', '™', '®', '®'); 

    	$var = str_replace($look, $safe, $var);

    	$var = mysql_real_escape_string($var); 

    	return $var; 
    						}

Yani veritabanına öyle olsun.

Bu işlevi ile her şeyi filtreleyerek veritabanından geri:

function decodeit($var) {

    	return html_entity_decode(stripcslashes($var), ENT_QUOTES, 'UTF-8');
    						}

Ne yazık ki, tüm bu sonra ben HALA tutarsız sonuçlar olsun. En sık ® sembolleri küçük elmas olur.

Ben bu konuda iyi tut heryerde arandı ancak en iyi yöntem ne bulmak için görünmüyor olabilir ...

4 Cevap

Maalesef web sayfası başlıkları wysiwyg editör tarafından temizlendi var. Açıklık aşkına:

Web sayfası başlıkları şunlardır:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Ve

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Veritabanındaki htmlentitiesi koymayın! HTML_ENTITIES () diyoruz, asla php önerilmemektedir edilmelidir. Eğer metni görüntülemek zaman veritabanında koymak önce değil, htmlspecialchars kullanın ama. Nokta html olarak tedavi altına verilerinizi önlemektir. Onlar bir risk neden olmaz, çünkü ticari marka simgeleri veya telif hakkı sembolleri tercüme hiçbir anlamı yoktur. Hakkında endişelenmenize gerek tek html:> < & '"

Her şey zaten utf8 kodlanmıştır. ISO-8859-1 Çözümün sadece herhangi bir Japon batık olacaktır.