php - MySQL/PHP preg_replace 和 KEEP 重音符号和空格

标签 php mysql preg-replace diacritics

我有一个 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/

相关文章:

php - 按最新回复时间排列论坛帖子

php - 使用php从数据库检索数据到android

php - 将时间值与数据库进行比较以停止重复条目

php - laravel 5 一对一关系显示外键名称字段

php正则表达式如何获取字符串的最后一部分

php - 使用php获取字符串的一部分

php - 解决 PHP5 的 PDO rowCount MySQL 问题

php - 扩展 attach() 方法?

php - 正则表达式:如果字符串包含括号内的特定单词,则删除括号及其内容

php - Google 邮件在 html 电子邮件中的图像的 src 路径中插入加号