str_split() 在 PHP 中使用带有特殊字符的字符串时无法正常工作
str_split() not working properly in PHP when using string with 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 个字符,如何实现?
我想要达到的是遍历字符串的所有字符,因此也欢迎任何其他解决方案。
根据 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);
}
我正在尝试以下
$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 个字符,如何实现?
我想要达到的是遍历字符串的所有字符,因此也欢迎任何其他解决方案。
根据 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);
}