我有一个 MySQL 数据库,从 PHP 支持的表单中获取数据。表列整理为 utf8_bin,连接字符集设置为 utf8,HTML 也是如此。
经过广泛的谷歌搜索后,我似乎无法找到任何明确的方法来使用 preg_replace 去除不需要的字符(和数字)但保留大写/小写重音、元音变音和空格。我拼凑了一些似乎有用的东西——但我根本不明白,所以不知道它有多安全。因此与逃避条款加倍:
$lname = preg_replace("/(<\/?)(\w+)([^>]*>)/e","", $lname);
$lname = mysql_real_escape_string($lname);
我真正需要的是那种可以采用以下名称(例如我的名称)的子句:“Éamonn Mac Lochlainn”并将其存储为这样,而不是“c389616d6f6e6eMacLochlainn”我也看过 strip_tags,允许“ÁÉÍÓÚáéíóú”。这是前进的方向吗?
任何帮助 - 尤其是对这段代码(\w+ 位)中发生的事情的解释 - 将不胜感激。
最佳答案
\w
是根据当前语言环境的单词字符。如果为所有数据正确设置:没问题。如果您的语言环境不够,您可以说所有字母和空格都有效:
$lname = preg_replace('/[^\s\p{L}]/u','',$lname);
有关\w
的更多信息,请参阅Escape sequences
有关 unicode 属性(\p
与 /u
开关的组合)的更多信息,请参阅 Unicode Properties
你似乎做了更多的事情,不仅仅是验证字符,还剥离了 HTML 标签。 strip_tags
确实适用于此(在替换之前执行)。
关于php - MySQL/PHP preg_replace 和 KEEP 重音符号和空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6930431/