PHP HTML varlıkları

6 Cevap

I want to display on screen data send by the user, remembering it can contain dangerous code, it is the best to clean this data with html entities.

Bunun yanında html varlıkları, yapmak için daha iyi bir yolu var mı:

$name = clean($name, 40);
$email = clean($email, 40);
$comment = clean($comment, 40);

ve bu:

$data = array("name", "email," "comment") 

function confHtmlEnt($data)
{
return htmlentities($data, ENT_QUOTES, 'UTF-8');
}

$cleanPost = array_map('confHtmlEnt', $_POST);

if so, how, and how does my wannabe structure for html entities look?

Newb :-) alevli değil için teşekkür ederiz.

6 Cevap

Onların eşdeğer kuruluşlara beş özel HTML karakterleri dönüştürmek istiyorsanız, aşağıdaki yöntemi kullanın:

function filter_HTML($mixed)
{
 return is_array($mixed)
  ? array_map('filter_HTML',$mixed)
  : htmlspecialchars($mixed,ENT_QUOTES);
}

Bu UTF-8 veya tek-bayt kodlanmış dize ikisi için de çalışmak istiyorum.

Dize UTF-8 kodlanmış Ama eğer, önce filter_HTML () işlevini kullanarak herhangi bir geçersiz karakter dizisini, süzmek için emin olun:

function make_valid_UTF8($str)
{
 return iconv('UTF-8','UTF-8//IGNORE',$str)
}

Ayrıca bakınız: http://www.phpwact.org/php/i18n/charsets#character%5Fsets%5Fcharacter%5Fencoding%5Fissues

"Temiz POST", tek sorun context veri görünür ne bilememektedir değildir. Ben bu tarayıcı istemci ve bir masaüstü istemcisi aracılığıyla çalışır ve hem de farklı bir şekilde veri gerek şimdi bir sohbet sunucusu var. Yani DB içine mümkün olduğu kadar "ham" olarak verileri kaydetmek ve sonra endişelenecek emin olun filtering it on output.

$ _POST / $ _GET Her şeyi kodlamak etmeyin. HTML-öncelemeli bir çıkış kodlama sorunu değil, bir giriş-kontrol biridir.

Çağrı htmlentities (ya da, genellikle daha iyi, htmlspecialchars) Sadece bazı düz metin alarak ve birleştirerek veya bir HTML sayfası içine yankılanan konum noktada. Yani kullandığınız metin gönderilen parametre veya veritabanından gelen olmadığını geçerlidir, ya da başka bir yerde tamamen. mysql_real_escape_string sadece değişmez bir SQL string içine düz metin eklemek noktada diyoruz.

Bu script üstündeki kendi kutusunda tüm bu kaçan şeyler kıpırdamak ve sonra unutun cazip. But text preparation really doesn't work like that, ve bunu çift kodlanmış rezil onarılamaz tam veritabanı bulacaksınız yaptığı iddia eğer başka bir kaynaktan gelen verileri alarak çünkü, HTML sayfası ve güvenlik delikleri tersbölüler sen nokta vermedi (kodlanmış) parametrelerden daha.

Size hatırlama yükü mysql_real_escape_string mysqli parameterised oluyor sorguları veya başka bir üst düzey veri erişim katmanı kullanılarak uzağa gitmek yapabilirsiniz. Bunun için, daha kısa bir adlandırılmış işlev, örneğin tanımlayarak htmlspecialchars her zaman daha az rahatsız yazarak yükünü yapabilirsiniz.:

<?php
    function h($s) {
        echo(htmlspecialchars($s, ENT_QUOTES));
    }
?>
<h1> Blah blah </h1>
<p>
    Blah blah <a href="<?php h($link); ?>"><?php h($title); ?></a> blah.
</p>

veya farklı bir çiftleşmiş motoru kullanarak varsayılan HTML kodlar söyledi.

Bir şablon motoru ile bir çerçeve kullanıyorsanız, otomatik kodlamak dizeleri bir olasılık oldukça muhtemeldir. Bunun dışında, ne bir işlevi çağıran ve geri varlık-"kodlanmış" dizesini almak daha basit?

, Php filter kütüphaneleri Çıkış özellikle filter_input_array.

filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);

Bunu görüntüleyen her eleman bevor temizlemek gerekir. Ben bir işlevi ve secound örnekte olduğu gibi bir dizi genellikle bunu.