Php 带标签不工作

Php 带标签不工作,php,mysql,html,filter,strip-tags,Php,Mysql,Html,Filter,Strip Tags,我正在尝试像这样过滤html字符 $user = $_POST["user"]; //Get username from <form> mysql_real_escape_string($user); //Against SQL injection strip_tags($user); //Filter html characters out $user=$\u POST[“user”]//从中获取用户名 mysql\u real\u escape\u字符串($user)//反对S

我正在尝试像这样过滤html字符

$user = $_POST["user"]; //Get username from <form>
mysql_real_escape_string($user); //Against SQL injection
strip_tags($user); //Filter html characters out
$user=$\u POST[“user”]//从中获取用户名
mysql\u real\u escape\u字符串($user)//反对SQL注入
带标签($user)//过滤html字符
但由于某些原因,这并不是过滤html字符。我不知道为什么,可以通过
mysql\u real\u escape\u string

strip_tags($user); //Filter html characters out
应替换为以下内容:

$user = strip_tags($user); //Filter html characters out
strip_标记
返回剥离值

见文件:

这与mysql\u real\u escape\u string()相同。

您正在不正确地使用:

string strip_标记(string$str[,string$allowed_标记])

修改代码以将其分配给返回值应该可以修复它

$user = strip_tags($user); //Filter html characters out
编辑

为了完整起见,感谢lorenzo-s指出这一点,您还需要对
mysql\u real\u escape\u字符串执行同样的操作

$user = mysql_real_escape_string($user); //Against SQL injection
$user = mysql_real_escape_string($user); // Against SQL injection
……但是,你的意思是:

$user = $_POST["user"]; // Get username from <form>
$user = mysql_real_escape_string($user); // Against SQL injection
$user = strip_tags($user); // Filter html characters out
$user=$\u POST[“user”];//从中获取用户名
$user=mysql\u real\u escape\u字符串($user);//反对SQL注入
$user=strip_标签($user);//过滤html字符
?

正如在其他答案中所述(参考
strip\u tags()
,但对于
mysql\u real\u escape\u string()
),这些函数不直接更改字符串,而是返回修改后的副本。因此,您必须将返回值分配给同一(或另一)变量

如前所述

$user = strip_tags($user);
应该使用,但我也会

mysql_real_escape_string($user);

在调用strip_tags()之后

哪种HTML字符不会被过滤掉?不会过滤掉所有的HTML,只是一些标签。其次,盲目应用某些esacpe或strip函数并不会增加太多安全性,您需要知道自己具体在做什么。这是输入验证、清理和构建数据库查询的难点。这也是错误的顺序(即使strip_标记不太可能撤消转义)。如果这是问题所在,他会在
mysql_real_escape_string()上犯同样的错误
也是。对于
strip\u标签的顺序应该一点也不重要
/
mysql\u real\u escape\u string
。就个人喜好而言,我同意。听起来不错,但标准方式是strip_标签(html_实体_解码($user))