PHP str_split 已解码 html_entity 的字符串
PHP str_split on string with decoded html_entity
如果我运行这个代码:
<?php
$string = 'My string ‘to parse’';
$string_decoded = html_entity_decode($string, ENT_QUOTES, 'utf-8');
$string_array = str_split($string_decoded);
var_dump($string_array);
?>
我得到这个结果:
array (size=28)
0 => string 'M' (length=1)
1 => string 'y' (length=1)
2 => string ' ' (length=1)
3 => string 's' (length=1)
4 => string 't' (length=1)
5 => string 'r' (length=1)
6 => string 'i' (length=1)
7 => string 'n' (length=1)
8 => string 'g' (length=1)
9 => string ' ' (length=1)
10 => string '�' (length=1)
11 => string '�' (length=1)
12 => string '�' (length=1)
13 => string 't' (length=1)
14 => string 'o' (length=1)
15 => string ' ' (length=1)
16 => string 'p' (length=1)
17 => string 'a' (length=1)
18 => string 'r' (length=1)
19 => string 's' (length=1)
20 => string 'e' (length=1)
21 => string '�' (length=1)
22 => string '�' (length=1)
23 => string '�' (length=1)
如您所见,我得到的不是解码的单引号 (left/right),而是每个引号的这三个字符...
我注意到某些实体会发生这种情况,但其他实体不会。 ‘ ” $copy;
提出了这个问题。一些不存在相同问题的是 & $gt;
。
我尝试了不同的字符集,但找不到适合所有人的字符集。
我做错了什么?有没有办法让它适用于所有实体?或者至少所有 "common" 个?
谢谢。
这个应该不错:
function mb_str_split($string) {
return preg_split('/(?<!^)(?!$)/u', $string );
}
$string = 'My string ‘to parse’';
$string = utf8_encode($string);
$string_decoded = html_entity_decode($string, ENT_QUOTES, 'utf-8');
$string_array = mb_str_split($string_decoded);
var_dump($string_array);
如评论中所述:您需要使用 mb_split 或正则表达式拆分字符串。
如果我运行这个代码:
<?php
$string = 'My string ‘to parse’';
$string_decoded = html_entity_decode($string, ENT_QUOTES, 'utf-8');
$string_array = str_split($string_decoded);
var_dump($string_array);
?>
我得到这个结果:
array (size=28)
0 => string 'M' (length=1)
1 => string 'y' (length=1)
2 => string ' ' (length=1)
3 => string 's' (length=1)
4 => string 't' (length=1)
5 => string 'r' (length=1)
6 => string 'i' (length=1)
7 => string 'n' (length=1)
8 => string 'g' (length=1)
9 => string ' ' (length=1)
10 => string '�' (length=1)
11 => string '�' (length=1)
12 => string '�' (length=1)
13 => string 't' (length=1)
14 => string 'o' (length=1)
15 => string ' ' (length=1)
16 => string 'p' (length=1)
17 => string 'a' (length=1)
18 => string 'r' (length=1)
19 => string 's' (length=1)
20 => string 'e' (length=1)
21 => string '�' (length=1)
22 => string '�' (length=1)
23 => string '�' (length=1)
如您所见,我得到的不是解码的单引号 (left/right),而是每个引号的这三个字符...
我注意到某些实体会发生这种情况,但其他实体不会。 ‘ ” $copy;
提出了这个问题。一些不存在相同问题的是 & $gt;
。
我尝试了不同的字符集,但找不到适合所有人的字符集。
我做错了什么?有没有办法让它适用于所有实体?或者至少所有 "common" 个?
谢谢。
这个应该不错:
function mb_str_split($string) {
return preg_split('/(?<!^)(?!$)/u', $string );
}
$string = 'My string ‘to parse’';
$string = utf8_encode($string);
$string_decoded = html_entity_decode($string, ENT_QUOTES, 'utf-8');
$string_array = mb_str_split($string_decoded);
var_dump($string_array);
如评论中所述:您需要使用 mb_split 或正则表达式拆分字符串。