Если я запускаю этот код:PHP str_split на строку с расшифрованной 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)
Как вы можете видеть, вместо расшифрованных одинарные кавычки (левый/правый), Я получаю эти три символа для каждой цитаты ...
Я заметил, что это происходит с некоторыми объектами, но не с другими. Некоторые из них представляют этот вопрос: ‘ ” $copy;
. Некоторые из них не представляют ту же проблему: & $gt;
.
Я пробовал разные charsets, но не смог найти тот, который будет работать на всех.
Что я делаю неправильно? Есть ли способ заставить его работать для всех объектов? Или, по крайней мере, все «общие»?
Спасибо.
Из [PHP Docs] (http://php.net/manual/en/function.str-split.php): 'Примечание: str_split() будет разделена на __bytes__, а не символы при работе с многобайтовой закодированной строкой. '(мой акцент) .... умные цитаты типа' ‘ 'переводятся на многобайтовый символ –
Вы должны использовать' mb_split': http: // php .net/manual/en/function.mb-split.php для utf-8 – Zefiryn