【问题标题】:strip_tags enough to remove HTML from string?strip_tags 足以从字符串中删除 HTML?
【发布时间】:2012-09-22 01:19:13
【问题描述】:

站点用户可以在站点上注册,并且在注册期间他可以提供一个名称。

我希望这个名称是一个有效的名称,并且没有任何 HTML 和其他时髦的字符。 strip_tags 够用吗?

【问题讨论】:

  • 白名单而不是黑名单呢?如果您要求用户名符合某些要求,例如“没有时髦的字符”,则只允许一定范围的字符并检查,而不是相反。

标签: php html string strip-tags


【解决方案1】:

我发现没有单一的功能可以防止白痴用户输入。最好将几个混合在一起:

$val = trim($val);
$val = strip_tags($val);
$val = htmlentities($val, ENT_QUOTES, 'UTF-8'); // convert funky chars to html entities
$pat = array("\r\n", "\n\r", "\n", "\r"); // remove returns
$val = str_replace($pat, '', $val);
$pat = array('/^\s+/', '/\s{2,}/', '/\s+\$/'); // remove multiple whitespaces
$rep = array('', ' ', '');
$val = preg_replace($pat, $rep, $val);
$val = trim($val);
$val = mysql_real_escape_string($val); // excellent final step for MySQL entry

【讨论】:

  • 显然,把它放在一个函数中......function sanitize($val) { ... }......然后在任何你想要清理的东西上调用 sanitize
  • 不要忘记在 INSERT 查询中将参数放在引号中,否则所有这些转义都是徒劳的!
  • “优秀的 MySQL 入口最后一步”应该是“关键的最后一步”。这实际上是您必须做的唯一一步。
  • “最好将几个混合在一起” - 不要随意将随机函数混合在一起。为特定目的应用每个功能,而不是因为越多越好。
【解决方案2】:

Regex 可以很好地适应更少的代码:

^[A-Z]'?[- a-zA-Z]( [a-zA-Z])*$

这里有很好的例子:

Regex for names

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-01-10
  • 2022-07-01
  • 1970-01-01
  • 2010-09-19
  • 2017-09-06
  • 2021-11-01
  • 2019-04-19
相关资源
最近更新 更多