从字符串中删除非 ascii 字符

php
2022-08-30 08:49:17

我从网站提取数据时遇到奇怪的字符:

Â

如何删除任何不是非扩展 ASCII 字符的内容?


一个更合适的问题可以在这里找到:PHP - 替换所有支持的语言的所有非字母数字字符


答案 1

正则表达式替换将是最佳选择。用作示例字符串并使用 匹配它,这是一个 POSIX 字符类$str:print:

$str = 'aAÂ';
$str = preg_replace('/[[:^print:]]/', '', $str); // should be aA

所做的是查找所有可打印的字符。相反,查找所有不可打印的字符。任何不属于当前字符集的字符都将被删除。:print::^print:

注意:在使用此方法之前,必须确保当前字符集为 ASCII。POSIX 字符类同时支持 ASCII 和 Unicode,并且仅根据当前字符集进行匹配。从 PHP 5.6 开始,默认字符集是 UTF-8。


答案 2

您只想要 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, '' );

推荐