Eam*_*onn 1 php mysql diacritics preg-replace
我有一个MySQL数据库,从PHP驱动的表单提供数据.表列整理为utf8_bin,连接字符集设置为UTF-8,因为是HTML.
经过广泛的谷歌搜索后,我似乎找不到任何明确的方法来使用preg_replace来删除不需要的字符(和数字),但保留大写/小写的重音符号,变音符号和空格.我拼凑起来的东西,似乎工作 - 但我不理解的事,所以不知道它是多么安全.因此,使用escape子句加倍:
$lname = preg_replace("/(<\/?)(\w+)([^>]*>)/e","", $lname);
$lname = mysql_real_escape_string($lname);
Run Code Online (Sandbox Code Playgroud)
我真正需要的是那种可以采用以下名称的条款(我的,作为一个例子):"ÉamonnMacLochlainn"并存储它,而不是"c389616d6f6e6eMacLochlainn"我也看了strip_tags,允许"ÁÉÍÓÚáéíóú ".这是前进的方向吗?
任何帮助 - 特别是对此片段中发生的事情的解释(\ w +位) - 将不胜感激.
\w是根据当前区域设置的单词字符.如果为所有数据正确设置:没问题.如果您的语言环境不够,您可以说所有字母和空格都有效:
$lname = preg_replace('/[^\s\p{L}]/u','',$lname);
Run Code Online (Sandbox Code Playgroud)
有关详细信息\w,请参阅转义序列
有关unicode属性(\p与/u交换机结合使用)的详细信息,请参阅Unicode属性
你似乎做了更多,然后只是验证字符,也剥离HTML标签.strip_tags确实会这样做(在替换之前做).
如果您只想保留法语或英语的大写和小写字母字符,则此解决方案可能适合您:
\n\n<!DOCTYPE html>\n<html>\n<head>\n <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n</head>\n<body>\n<?php\n$str="Conf\xc3\xa9rence minist\xc3\xa9rielle sur la francophonie canadienne - \xc3\x89amonn Mac Lochlainn";\necho preg_replace("/[^a-zA-Z\xc3\x80-\xc3\xbf ]/",\'\',$str);\n?>\n</body>\n</html>\nRun Code Online (Sandbox Code Playgroud)\n\n回显的响应是:
\n\nConf\xc3\xa9rence minist\xc3\xa9rielle sur la francophonie canadienne \xc3\x89amonn Mac Lochlainn \nRun Code Online (Sandbox Code Playgroud)\n