我试图通过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>
答案 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是最安全的选择。