utf8中的Php字符比较
我正在尝试将所有UTF-8字符转换为普通ASCII字符。我循环遍历字符串的每个字符,并根据字符决定是否必须更改字符。对于ASCII字符,它可以正常工作,但代码不会更改UTF-8字符 以下是我的功能:utf8中的Php字符比较,php,utf-8,Php,Utf 8,我正在尝试将所有UTF-8字符转换为普通ASCII字符。我循环遍历字符串的每个字符,并根据字符决定是否必须更改字符。对于ASCII字符,它可以正常工作,但代码不会更改UTF-8字符 以下是我的功能: function toNoUTFChars($inputString){ $stringArray = str_split($inputString); $finalString = ''; foreach ($stringArray as $char) {
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ččč测试输出”
预期输出:“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);
}
函数删除重音($txt){
$q='EOF'。百万兰特(100000000,99999999);
$q=“LCycType=EnU.UTF8ICOF-8UTF-8/T ASCII//平移<代码> StReSpuls不适用于多字节字符。可能需要考虑使用来自Itl扩展的类,例如代码> $FialSnc= TrimeRealTax音译(“ANY拉丁语;拉丁ASCII”,$输入字符串)。;
为什么不使用PHP的内置iconv函数来做同样的事情?@miken32这个remove_accents()函数包含内置iconv()函数调用了一段时间,但有时不能正常工作。这是几年前的事了,所以老实说,我记不起细节。然后,有一段时间它只是iconv二进制调用,然后又有一些字符串无法转换,这就是我添加LC_CTYPE设置的时候。如果您担心性能,可以尝试iconv()调用时,参数与-f和-t开关相同,但我建议您监视字符串转换,尤其是在对从未知源接收的字符串使用函数时。