使用带有特殊字符的字符串时,str_split()在PHP中无法正常工作

时间:2015-10-10 13:58:00

标签: php arrays special-characters

我正在尝试以下

$x = "126·10⁴";
$array = str_split($x);
echo "x = " . $x . "<br>";
echo "Array length: " . count($array) . "<br>";

 echo "Charset: " .mb_detect_encoding($x)."<br>";

foreach($array as $i)
    echo $i .  " ";

作为输出:

x = 126·10⁴
Array length: 10
Charset: UTF-8
1 2 6 � � 1 0 � � �

我希望·在数组中是1个字符,怎么办呢? 我想要达到的是迭代字符串的所有字符,所以任何其他解决方案也是受欢迎的。

1 个答案:

答案 0 :(得分:2)

根据comment in the PHP Manual(感谢@ Rizier123),正确的方法如下:

function str_split_unicode($str, $l = 0) {
    if ($l > 0) {
        $ret = array();
        $len = mb_strlen($str, "UTF-8");
        for ($i = 0; $i < $len; $i += $l) {
            $ret[] = mb_substr($str, $i, $l, "UTF-8");
        }
        return $ret;
    }
    return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}