Php utf 8 中的字符比较
Php Character comparation in utf8
我正在尝试将所有 UTF-8 字符转换为纯 ASCII 字符。我循环遍历字符串的每个字符,并根据我决定是否必须更改字符的字符。对于 ASCII 字符,它工作正常,但代码不会更改 UTF-8 字符。
这是我的函数:
function toNoUTFChars($inputString){
$stringArray = str_split($inputString);
$finalString = '';
foreach ($stringArray as $char) {
if($char == 'ě' || $char == 'é'){$finalString .= 'e';
}else if($char == 'š'){$finalString .= 's';
}else if($char == 'č'){$finalString .= 'c';
}else if($char == 'ř'){$finalString .= 'r';
}else if($char == 'ý'){$finalString .= 'y';
}else if($char == 'á'){$finalString .= 'a';
}else if($char == 'í'){$finalString .= 'i';
}else if($char == ' '){$finalString .= '-';
}else if($char == 'ú' || $char == 'ů'){$finalString .= 'e';
}else if($char == 'ň'){$finalString .= 'n';
}else if($char == 'ť'){$finalString .= 't';
}else if($char == 'ď'){$finalString .= 'd';
}else if($char == 'ó'){$finalString .= 'o';
}else if($char == 'ň'){$finalString .= 'n';
}else if(ctype_alpha($char)){
$finalString .= $char;
}
}
return $finalString;
}
示例输入“使用 utf8ččč 测试 Outputěěččč”
预期输出:“Test-Outputeeeccc-with-utf8ccc”
我得到的输出:“Test-Output-with-utf8”//缺少 Utf8 字符 :(
多年来我尝试了很多东西,但这是在所有情况下对我都有效的唯一方法:
function remove_accents($txt) {
$q = 'EOF'.mt_rand(100000000, 999999999);
$q = "LC_CTYPE=en_US.utf8 iconv -f UTF-8 -t ASCII//TRANSLIT <<$q\n$txt\n$q";
return substr(`$q`, 0, -1);
}
效率不高,因为它运行 iconv
二进制文件。
我正在尝试将所有 UTF-8 字符转换为纯 ASCII 字符。我循环遍历字符串的每个字符,并根据我决定是否必须更改字符的字符。对于 ASCII 字符,它工作正常,但代码不会更改 UTF-8 字符。
这是我的函数:
function toNoUTFChars($inputString){
$stringArray = str_split($inputString);
$finalString = '';
foreach ($stringArray as $char) {
if($char == 'ě' || $char == 'é'){$finalString .= 'e';
}else if($char == 'š'){$finalString .= 's';
}else if($char == 'č'){$finalString .= 'c';
}else if($char == 'ř'){$finalString .= 'r';
}else if($char == 'ý'){$finalString .= 'y';
}else if($char == 'á'){$finalString .= 'a';
}else if($char == 'í'){$finalString .= 'i';
}else if($char == ' '){$finalString .= '-';
}else if($char == 'ú' || $char == 'ů'){$finalString .= 'e';
}else if($char == 'ň'){$finalString .= 'n';
}else if($char == 'ť'){$finalString .= 't';
}else if($char == 'ď'){$finalString .= 'd';
}else if($char == 'ó'){$finalString .= 'o';
}else if($char == 'ň'){$finalString .= 'n';
}else if(ctype_alpha($char)){
$finalString .= $char;
}
}
return $finalString;
}
示例输入“使用 utf8ččč 测试 Outputěěččč”
预期输出:“Test-Outputeeeccc-with-utf8ccc”
我得到的输出:“Test-Output-with-utf8”//缺少 Utf8 字符 :(
多年来我尝试了很多东西,但这是在所有情况下对我都有效的唯一方法:
function remove_accents($txt) {
$q = 'EOF'.mt_rand(100000000, 999999999);
$q = "LC_CTYPE=en_US.utf8 iconv -f UTF-8 -t ASCII//TRANSLIT <<$q\n$txt\n$q";
return substr(`$q`, 0, -1);
}
效率不高,因为它运行 iconv
二进制文件。