【发布时间】: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