我的字符串有问题。在for循环之后,我得到了一些其他符号,而不是我的确切的西里尔字母。目标是将西里尔字母:ñčęėįšųūž改为:a1,c2,e1,e2,i1,s2,u1,u2,z2。我想出了这个:
$ltSymbolsArray = array(
'a1' => 'ą',
'c2' => 'č',
'e1' => 'ę',
'e2' => 'ė',
'i1' => 'į',
's2' => 'š',
'u1' => 'ų',
'u2' => 'ū',
'z2' => 'ž'
);
$string = 'ąsąžadcę';
for ($i = 0; $i < strlen($string); $i++) {
foreach ($ltSymbolsArray as $key => $value) {
if ($string[$i] == $value) {
$string[$i] = $key;
}
}
}
它看起来像一个简单的解决方案,但我无法处理编码。编码对我来说是一个谜,所以我真的很感激这个问题的任何帮助。
答案 0 :(得分:0)
你不能简单地迭代一个unicode字符串,并期望每个迭代都会收到一个完整的字符,如果一个字符确实超过一个字节。
将preg_split
与unicode修饰符结合使用,将字符串拆分为有效的unicode字符。然后使用此结果替换原始字符串中的字符。
您还可以使用多字节正则表达式函数之一,例如mb_ereg_replace