无法将希伯来语分成数组PHP

时间:2014-12-16 14:26:25

标签: php html arrays

我试图通过GET方法获取希伯来语输入并将其拆分为数组,尽管页面已编码,我仍然得到如下结果:数组([0] =&gt; [1] =&gt; [2] =&gt; [3] =&gt; [4] =&gt; [5] =&gt; [6] =&gt; [7] =&gt; )(单词是מילה)< / p>

这是我的代码,我做错了什么?

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    </head>
    <body>
        <?php
        $word = $_GET['word'];
        $arr = str_split($word);
        print_r($arr);
        ?>
    </body>
</html>

3 个答案:

答案 0 :(得分:2)

function splitMultiByte($string) {
  $output = array();
  for ($i = 0; $i < strlen($string); $i++) {
    $output[] = mb_substr($string,$i,1,'UTF-8');
  }
  return $output;
}

我认为导致此问题的原因是,ASCII中不支持希伯来字母,因此您需要使用以mb为前缀的PHP函数。它们将使用所谓的多字节(由多个字节表示的字母)值。

您可以使用上述功能。它应该按预期给你一个数组。

答案 1 :(得分:0)

这可能适合你。

<?php
 function mb_str_split( $string ) {
 # Split at all position not after the start: ^
 # and not before the end: $
 return preg_split('/(?<!^)(?!$)/u', $string );
 }

 $string   = 'מילה';
 $charlist = mb_str_split( $string );

 print_r( $charlist );
?>    


Another way,

function mbStrToArray ($string) {
$strlen = mb_strlen($string);
while ($strlen) {
    $array[] = mb_substr($string,0,1,"UTF-8");
    $string = mb_substr($string,1,$strlen,"UTF-8");
    $strlen = mb_strlen($string);
}
return $array;
}

 $result=mbStrToArray('מילה');
 print '<pre>';
 print_r($result);

答案 2 :(得分:0)

没有足够的声誉来添加评论,所以选择一个答案:

strlen与希伯来语一起使用时出现问题,我猜想是其他多字节字符。

strlen('מילה') //equals 8 when in reality its 4 letters
mb_strlen('מילה') //also equals 8

更好地使用:

mb_strlen('מילה', "UTF-8") //equals 4 as it should

因此,将约翰内斯·克林(Johannes Kling)的答案记入帐户,我们得到:

function splitMultiByte($string) {
    $output = array();
    for ($i = 0; $i < mb_strlen($string, "UTF-8") ; $i++) {
        $output[] = mb_substr($string,$i,1,'UTF-8');
    }
    return $output;
}

mb_strlen默认情况下使用“内部字符编码”,因此,如果其不是UTF-8,则计数将是错误的。因此,显式设置UTF-8是最安全的选择。