PHP:阿拉伯字符作为数组键

PHP:阿拉伯字符作为数组键,php,arrays,key,arabic,multibyte-functions,Php,Arrays,Key,Arabic,Multibyte Functions,我想实现一个简单的阿拉伯语到英语的音译。我定义了一个映射数组,如下所示: $mapping = array('ﺏ' => 'b', 'ﺕ' => 't', ...) 我希望下面的代码将阿拉伯语字符串转换为相应的音译 $str = "رضي الدين"; $strlen = mb_strlen( $str, "UTF-8" ); for( $i = 0; $i <= $strlen; $i++ ) { $char = mb_substr( $str, $i, 1, "

我想实现一个简单的阿拉伯语到英语的音译。我定义了一个映射数组,如下所示:

$mapping = array('ﺏ' => 'b', 'ﺕ' => 't', ...)
我希望下面的代码将阿拉伯语字符串转换为相应的音译

$str = "رضي الدين";
$strlen = mb_strlen( $str, "UTF-8" );
for( $i = 0; $i <= $strlen; $i++ ) {
    $char = mb_substr( $str, $i, 1, "UTF-8" );
    echo bin2hex($char); // 'd8b1' for ﺭ
    // echo $mapping["$char"];
}
只有“ي”获得相同的值并进行转换

我不知道是什么问题

EDIT2


实际上,这两个代码都指

我建议您使用
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_*函数中的第二个参数)

我建议您使用
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_*函数中的第二个参数)

问题是您没有同时指定
mb_strlen()
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"];
}
$str=“ضيالدين”;
$mapping=数组('ﺏ' => 'b','ﺕ' => 't'、、?'=>c);
$strlen=mbstrlen($str,“UTF-8”);

对于($i=0;$i的问题是,您没有同时指定
mb_strlen()
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"];
}
$str=“ضيالدين”;
$mapping=数组('ﺏ' => 'b','ﺕ' => 't'、、?'=>c);
$strlen=mbstrlen($str,“UTF-8”);

对于($i=0;$i谢谢!我认为我的环境还有一些其他问题,因为您的代码输出的与我从代码中获得的相同。只有
ي
匹配并转换为
i
@Affan我的阿拉伯语知识非常基础:)谢谢!我认为我的环境还存在一些其他问题,因为您的代码输出的与我从代码中获得的相同。只有
ي
匹配并转换为
I
@Affan我的阿拉伯语知识非常基础:)