我有一个MySQL数据库,从一个PHP驱动的表单中获取数据。表格列被整理为utf8_bin,连接字符集被设置为utf8,HTML也是。
经过大量的谷歌搜索,我似乎找不到任何清晰的方法来使用preg_replace删除不需要的字符(和数字),但保留大小写重音、元音变音符和空格。我拼凑了一些看起来有用的东西——但我一点也不明白,所以不知道它有多安全。因此,与转义从句重叠:

$lname = preg_replace("/(<\/?)(\w+)([^>]*>)/e","", $lname);
        $lname = mysql_real_escape_string($lname);

我真正需要的是这样一个条款,它可以采用以下名称(我的,作为一个例子):“eAmonn Mac Lochlainn”并按原样存储,而不是“c389616d6f6e6eMacLochlainn”,我还查看了stripúu标记,允许“e389616d6f6e6emaclochlainn”。这是前进的道路吗?
任何帮助,特别是对这个片段(w+位)中发生的事情的解释,都将不胜感激。

最佳答案

\w是根据当前区域设置的单词字符。如果所有数据都设置正确:没问题。如果您的语言环境不够,可以说所有字母和空白都有效:

$lname = preg_replace('/[^\s\p{L}]/u','',$lname);

有关\w的更多信息,请参见Escape sequences
有关unicode属性的更多信息(与\p开关组合使用的/u),请参见Unicode Properties
除了验证字符之外,您似乎做了更多的工作,还剥离了HTML标记。strip_tags确实会起作用(在替换之前做)。

09-29 21:50