从字符串中删除陌生字母字符
Remove stranger alphabets characters from string
我正在尝试从用户输入中加载建议,但如果用户输入一些奇怪的字母字符(中文、希腊语...),我的查询将失败。
$alphaAccent = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ű', 'ý', 'ÿ');
$str = preg_replace('/[^A-Za-z0-9\-'.implode($alphaAccent).']/', '', $str); // Removes special chars.
看起来preg_replace
没有检查这种字符,而是将�字符放在$str
中。
有什么提示吗?
您需要将 /u
UNICODE modifier 传递给正则表达式,以便它可以匹配
$alphaAccent = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ű', 'ý', 'ÿ');
$str = preg_replace('/[^A-Za-z0-9\-'.implode($alphaAccent).']/u', '', $str);
简而言之,它使模式识别 Unicode,并使 PHP 将字符串视为 Unicode 字符串。
我正在尝试从用户输入中加载建议,但如果用户输入一些奇怪的字母字符(中文、希腊语...),我的查询将失败。
$alphaAccent = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ű', 'ý', 'ÿ');
$str = preg_replace('/[^A-Za-z0-9\-'.implode($alphaAccent).']/', '', $str); // Removes special chars.
看起来preg_replace
没有检查这种字符,而是将�字符放在$str
中。
有什么提示吗?
您需要将 /u
UNICODE modifier 传递给正则表达式,以便它可以匹配
$alphaAccent = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ű', 'ý', 'ÿ');
$str = preg_replace('/[^A-Za-z0-9\-'.implode($alphaAccent).']/u', '', $str);
简而言之,它使模式识别 Unicode,并使 PHP 将字符串视为 Unicode 字符串。