【问题标题】:Strip down everything, except alphanumeric and European characters in PHP删除所有内容,除了 PHP 中的字母数字和欧洲字符
【发布时间】:2012-11-15 02:47:28
【问题描述】:

我正在验证我的评论脚本,我需要删除所有非字母数字字符,除了在西欧使用的字符。

我的计划是用正则表达式输出所有非字母数字字符:

preg_replace("/[^A-Za-z0-9 ]/", '', $string);

但到目前为止,所有欧洲字符和一个 £ 符号都被去掉了,所以“Café Rouge”变成了“Caf Rouge”。

如何将一组欧元字符添加到上述正则表达式中。

数组是:

£, €, 
á, à, â, ä, æ, ã, å,
è, é, ê, ë,
î, ï, í, ì,
ô, ö, ò, ó, ø, õ,
û, ü, ù, ú,
ÿ,
ñ,
ß

我使用 UTF-8

解决方案:

$comment = preg_replace('/[^\p{Latin}\d\s\p{P}]/u', '', $comment);

$name = preg_replace('/[^\p{Latin}]/u', '', $name);

$name 也删除了标点符号和空格

感谢您的快速回复

【问题讨论】:

  • 您只是想防止 SQL 注入吗?这已经是一个已解决的问题。无需限制它的输入。 - The Great Escapism (Or: What You Need To Know To Work With Text Within Text)
  • 防止注入只是问题之一。我还想要有限数量的非字母数字字符,因为我以后可能会将标题重复用于友好链接,而且通常是因为我不喜欢奇怪的东西进入我的数据库。
  • 作为一个用非西方文字写作并喜欢偶尔用有用的装饰物装饰文本的人,我有点讨厌我的打字被称为“奇怪的东西”,如果我真的很恼火网站默默地删除了我写的部分内容。
  • Eeevee 我知道你的意思,但我必须这样做才能获得友好的链接。例如,用户可以创建一个可以在 www.example.co.uk/group_name 访问的线程。如果用户称他/她的威胁为“Café”,不幸的是 URL 将如下所示:example.co.uk/caf%3F。因为在大多数英文 URL 栏中很难显示字母“é”,所以我结束了将其正则表达式转换为基本的“e”。

标签: php regex alphanumeric latin1


【解决方案1】:
echo preg_replace('/[^A-Z0-9 £€áàâä...]/ui', '', $string);

重要的部分是/u 标志。确保您的源代码和 $string 是 UTF-8 编码的。

我仍然认为这是错误的方法,因为它严重限制了您的用户可以输入的内容,并且它惹恼一些人,但是无论您的船漂浮什么...顺便说一句,您的列表不包含标点符号。

【讨论】:

  • 嗯,问题是,我想让 cmets 保持专业,因此 'café' 应该是咖啡厅而不是咖啡厅;但我也宁愿去掉其他符号,如心形、钻石等。所以我认为独占数组比包容数组更合适。
【解决方案2】:
preg_replace('/[^\p{Latin}\d ]/u', '', $str);

【讨论】:

  • 在我看来,空格也必须保留 (/[^\p{Latin}\d\s]/u)。
  • @piouPiouM - 我不确定 OP 是否希望保留制表符和其他空白字符。一些欧洲名称还包含'- 字符,因此很可能OP 会根据测试调整允许的字符集...
猜你喜欢
  • 2012-10-24
  • 2010-10-24
  • 2011-11-08
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多