从字符串中删除非 ascii 字符
2022-08-30 08:49:17
正则表达式替换将是最佳选择。用作示例字符串并使用 匹配它,这是一个 POSIX 字符类:$str
:print:
$str = 'aAÂ';
$str = preg_replace('/[[:^print:]]/', '', $str); // should be aA
所做的是查找所有可打印的字符。相反,查找所有不可打印的字符。任何不属于当前字符集的字符都将被删除。:print:
:^print:
注意:在使用此方法之前,必须确保当前字符集为 ASCII。POSIX 字符类同时支持 ASCII 和 Unicode,并且仅根据当前字符集进行匹配。从 PHP 5.6 开始,默认字符集是 UTF-8。
您只想要 ASCII 可打印字符吗?
使用这个:
<?php
header('Content-Type: text/html; charset=UTF-8');
$str = "abqwrešđčžsff";
$res = preg_replace('/[^\x20-\x7E]/','', $str);
echo "($str)($res)";
或者更好的是,将您的输入转换为utf8,并使用phputf8 lib将“非正常”字符转换为其ascii表示形式:
require_once('libs/utf8/utf8.php');
require_once('libs/utf8/utils/bad.php');
require_once('libs/utf8/utils/validation.php');
require_once('libs/utf8_to_ascii/utf8_to_ascii.php');
if(!utf8_is_valid($str))
{
$str=utf8_bad_strip($str);
}
$str = utf8_to_ascii($str, '' );