2012-10-15 34 views
0

消毒一些用户输入;PHP;编码和解码功能产生相同的输出

function html_mysql_sanitise($data) { 
    if(get_magic_quotes_gpc()) { 
    $data = stripslashes($data); 
    } 
    $data = htmlentities($data, ENT_QUOTES); 
    $data = htmlspecialchars($data, ENT_QUOTES); 
    return mysql_real_escape_string($data); 
} 

$_POST['data'] = html_mysql_sanitise($_POST['data']); 

echo $_POST['data']; 
echo html_entity_decode(htmlspecialchars_decode($_POST['data'])); 
echo html_entity_decode($_POST['data'], ENT_NOQUOTES); 
echo htmlspecialchars_decode($_POST['data'], ENT_NOQUOTES); 

$ _POST ['data'] is set to;

test<d#'!;ta> 

这是的输出是;

test&lt;d#&#039;!;ta&gt; 
test 
test<d#'!;ta> 
test<d#'!;ta> 

为什么最后两个产生相同的结果,第二个是发布数据的一部分?由于最后两个似乎产生了期望的结果,我应该使用哪一个?

谢谢。

+0

是'''提交为'"'?如果它只是一个真正的''',那么解码不会改变它。 –

+2

请不要使用'mysql_ *'函数来编写新代码。他们不再维护,社区已经开始[弃用程序](http://goo.gl/KJveJ)。请参阅* [红盒子](http://goo.gl/GPmFd)*?相反,您应该了解[准备好的语句](http://goo.gl/vn8zQ)并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能决定哪些,[这篇文章](http://goo.gl/3gqF9)会帮助你。如果你选择PDO,[这里是很好的教程](http://goo.gl/vFWnC)。另请参阅[为什么不应该在PHP中使用'mysql'函数?](http://goo.gl/ycnmO) –

+0

@MadaraUchiha感谢您的信息Madara,一些非常有用的链接,我将尽快更新此代码!感谢:D – jwbensley

回答

1

为什么要重新发明轮子...使用:

http://htmlpurifier.org/docs

或者这样:

http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/index.php

既精通你想要做什么。

+0

这些都非常棒,非常感谢链接!正是我需要的和更强大的 – jwbensley

+0

,我将它与来自@MadaraUchiha关于mysql_函数的评论结合起来。 PDO也是最好的方式 - 正如他的论点一样,你的应用程序可能正处于改变这种情况的阶段 – Brian