我正在尝试删除描述中具有非英文字母的缓存配置文件。我可以使用破折号,符号,特殊字符,并强调所有我不想在字符串中使用外来字符的地方。
问题是,我下面的代码检测到á
为ASCII的字符串,即使它不是英文字符,也可以正确地与ASCII匹配吗?
if (!mb_detect_encoding($this->removeEmojis(str_replace(" ", "", $cacheItem->description), 'ASCII', true)))
{
$cacheItem->delete(); // laravel
}
$cacheItem->description
的值
Welcome to my profile<br> Londrina-Paraná
字母á
是非英语字符。
说明中还可以包含点,符号,特殊字符,但我想检测拉丁字符等外来字符。
说明中也可以包含表情符号,因此我尝试使用此功能将其删除
private function removeEmojis($text){
// theres lots more inside the preg_replace I truncated it for readability
return preg_replace('/[\x{1F3F4}](?:\x{E0067}\x{E0062}\x{E0077}\x{E006C}\x{E0073}\x{E007F})|[\x{1F3F4}]/u', ' ', $text);
}
答案 0 :(得分:1)
通过使用此regexp,您可以检测到任何不可打印ASCII的字符
[^ \ x20- \ x7E]] *
将匹配项替换为空字符串,然后得到一个纯净的字符串,然后可以应用表情符号替换。
答案 1 :(得分:1)
您可以使用preg_match
来检查字符串中的所有字符是否都在ASCII字符范围<space>
至~
范围内
$description = 'Welcome to my profile<br> Londrina-Paraná';
var_dump(preg_match('/^[ -~]*$/', $description));
$description = 'Welcome to my profile<br> Londriná-Parana';
var_dump(preg_match('/^[ -~]*$/', $description));
$description = 'Welcome to my profile<br> Londrina-Parana';
var_dump(preg_match('/^[ -~]*$/', $description));
输出:
int(0)
int(0)
int(1)