晚上好。

这是我的代码:

static private  function removeAccentedLetters($input){
    for ($i = 0; $i < strlen($input); $i++) {
        $input[$i]=self::simplify($input[$i]);
    }
    return $input;
}
static private function simplify($in){
    $ord=ord($in);
    switch ($ord) {
        case 193: //Á...
        return 'A';
        case 98: //b
        return 'a';
        default:
        return $in;
    }
}

行。这是不起作用的位

case 193: //Á...
  return 'A';

这就是这样做的:

case 98: //b
return 'a';

这些只是用于测试目的。

谁能告诉我发生了什么事?我之前遇到了相同的错误,但是现在我没有在代码本身中使用任何扩展ASCII,这是以前的错误原因。

我认为它必须与字符编码有关,但我不确定。顺便说一句,我正在以日食进行编码,并且据此,我正在使用的字符是CP1252。

哦,是的,该代码应该消除任何重音字母,例如Áà,并用其基本vogals代替它们,即

提前致谢

有帮助吗?

解决方案

如果您有多字节字符,并且您正在使用每个字符循环 strlen() 检查您是否循环? strlen() 假设1个字节== 1个字符。

我会看 现有的音译库 用于PHP。

其他提示

也许此功能可以帮助您与MB_STRLEN结合使用:

mb_strcut或者mb_substr

编辑:例如,您可以这样做:

$string = 'cioèòà';
for ($i=0;$i<mb_strlen($string);$i++) {
  echo mb_substr($string, $i, 1);
}

这会回应您所有的魅力。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top