Loại bỏ thẻ html và ký tự đặc biệt trong PHP

Nếu bạn làm website tương tác 2 chiều giữa user với nhau thì có thể sẽ bị trường hợp này, đó là XSS(Cross Site Scripting) nôm na là người dùng sẽ nhập các tag đặc biệt. Vidu: trong code .js này sẽ thực thi đoạn code gì đó thì có mà tiêu. Vậy vấn đề của chúng ta là không cho nhập hoặc hiện thị, hoặc không lưu nó vào csdl.

Cách 1: Dùng strip_tags() đặc biệt của function này là sẽ cho phép các tag nào được sử dụng:

<?php
$text = '<p>Test paragraph.</p><!-- Comment --> 
<a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>


Cách 2: Sẽ bỏ các tag nào được liệt kê:

<?php
function strip_only($str, $tags) {
if(!is_array($tags)) {
$tags = (strpos($str, '>') !== 
false ? explode('>', str_replace('<', '', $tags)) : array($tags));
 if(end($tags) == '') array_pop($tags);
 }
foreach($tags as $tag) $str = 
preg_replace('#</?'.$tag.'[^>]*>#is', '', $str);
    return $str;
}

$str = '<p style="text-align:center">Paragraph</p>
<strong>Bold</strong><br/>
<span style="color:red">Red</span><h1>Header</h1>
<script type="text/javascript" 
src="/zend/mvc/public/templates/webadmin/system/js/ddaccordion.js">
</script>';

echo strip_only($str, array('script'));
echo strip_only($str, '<p><h1>');
?>
Chúc các bạn thành công