0
4

2 回答 2

2

我建议你使用preg引擎,因为它本身就适用于 UTF-8。mb_* 是一个不错的选择,当然,但我认为它更复杂。

我为您的案例制作了一个样本:

$sData     = "رضي الدين";
$rgReplace = [
  'ﺏ' => 'b', 
  'ﺕ' => 't', 
  'ن' => 'n', 
  'ي' => 'i', 
  'د' => 'f', 
  'ل' => 'l', 
  'ا' => 'a',
  'ر' => 'r', 
  'ي' => 'i',
  'ض' => 'g',
  ' ' => ' '
];
$sResult   = preg_replace_callback('/./u', function($sChar) use ($rgReplace)
{
   return $rgReplace[$sChar[0]];
}, $sData);
echo $sResult; //rgi alfin

至于您的代码 - 尝试直接传递编码(mb_* 函数中的第二个参数)

于 2013-08-23T06:32:30.980 回答
2

问题是您没有同时为mb_strlen()and指定编码mb_substr();以下工作正常:

$str = "رضي الدين";
$mapping = array('ﺏ' => 'b', 'ﺕ' => 't', 'ر' => c);
$strlen = mb_strlen( $str, "UTF-8" );
for( $i = 0; $i <= $strlen; $i++ ) {
    $char = mb_substr( $str, $i, 1 , "UTF-8");
    echo $mapping["$char"];
}
于 2013-08-23T06:35:31.057 回答