PHP;编码和解码功能产生相同的输出

时间:2012-10-15 15:35:39

标签: php input-sanitization

清理一些用户输入;

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']设置为;

test<d#'!;ta>

输出是;

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

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

谢谢。

1 个答案:

答案 0 :(得分:1)

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

http://htmlpurifier.org/docs

或者这个:

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

两者都擅长你想要做的事情。