2011-06-23 20 views
5

Kullanıcıların bir metin alanında kendi HTML'lerini girmelerine izin verdiğimiz bir web uygulamasına sahibiz. Bu verileri veritabanımıza kaydediyoruz.htmlentities() Çince karakterleri kullanılamaz hale getiriyor

Metin alanına html verilerini yüklediğimizde, html verilerini textarea'ya atmadan önce htmlentities() yöntemini kullanıyoruz. Aksi taktirde kullanıcılar textarea'nın içine girebiliyordu ve bizim uygulamalarımız bunu textarea'ya yüklerken kırılacaktı. Bu, Çince karakterler (ve muhtemelen Arapça, Japonca gibi diğer diller) girerken hariç, bu harika çalışır.

htmlentities(), Çince metnin şu şekilde kullanılamaz hale getirilmesini sağlar: à ¨à ³à ¼à §ï Girilen html'yi metin alanına yüklemeden önce htmlentities() öğesini kaldırdığımda, Çince karakterler sadece iyi görünmek, ama sonra biz özellikle metin alanı içine bir kullanıcı girdiğinde, textarea ile müdahale HTML sorunu var.

Umarım bu mantıklıdır.

Metin alanımız içerisinde Çince, Japonca, ... gibi dillerin kullanılmasına nasıl izin verebileceğimizi bilerek, metin alanımızdaki html'yi yüklemek için hala güvenli olduğumuzu bilen var mı?

+3

'charset' parametresini belirtmeyi deneyin – Robik

+0

Hangi karakter kodlamasını kullanıyorsunuz? – GordonM

+0

Sayfanız için hangi karakter kümesi tanımlandı? –

cevap

2

Karakter dizisini belirtin, örn. UTF-8 ve çalışması gerekir. (Yavaş yavaş, özellikle PHP5, iyiye gidiyor rağmen, ancak kullandığınız hangi sürümü belirtmeyen)

echo htmlentities($data, ENT_COMPAT, 'UTF-8'); 
+0

teşekkürler, ama yine de yukarıdaki cevabı bulduk. Yardımın için teşekkürler! – Jorre

2

PHP uluslararası karakter kümeleri için çerçeve çapında destek açısından oldukça korkunç. Yine de size yardımcı olacak birkaç mb_ (çok baytlı karakterlerde olduğu gibi) vardır.

Bu örnek (here itibaren) yardımcı olabilir:

<?php 
/** 
* Multibyte equivalent for htmlentities() [lite version :)] 
* 
* @param string $str 
* @param string $encoding 
* @return string 
**/ 
function mb_htmlentities($str, $encoding = 'utf-8') { 
    mb_regex_encoding($encoding); 
    $pattern = array('<', '>', '"', '\''); 
    $replacement = array('&lt;', '&gt;', '&quot;', '&#39;'); 
    for ($i=0; $i<sizeof($pattern); $i++) { 
     $str = mb_ereg_replace($pattern[$i], $replacement[$i], $str); 
    } 
    return $str; 
} 
?> 

Ayrıca, sayfa aynı karakter kümesi belirterek emin olun. Bir meta etiketi ile yapabilirsiniz:

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

bulunan gibi. Çıkış kodlamasını zaten biliyorsanız, html_entities function'un charset argümanını kullanın.

Henüz bir dahili kodlamaya karar vermemişseniz, iconv işlevlerine bakın; iconv_set_encoding("internal_encoding", "UTF-8"); iyi bir başlangıç ​​olabilir.

İlgili konular