1

各位晚安。

这是我的代码:

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,这是之前出错的原因。

我认为它必须与字符编码有关,但我不确定。顺便说一句,我在 Eclipse 中编码,据它说,我使用的字符编码是 Cp1252。

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

提前致谢

4

2 回答 2

2

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

我会研究现有的 PHP 音译库

于 2010-09-16T07:01:55.633 回答
1

也许这个函数可以帮助你结合 mb_strlen:

mb_strcutmb_substr

编辑:例如,你可以这样:

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

这会将所有单个字符都呼应出来。

于 2010-09-16T07:09:55.943 回答