HTML сущности — PHP str_split на строку с декодированным html_entity

Если я запускаю этот код:

<?php
$string = 'My string &lsquo;to parse&rsquo;';
$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)

Как видите, вместо декодированных одинарных кавычек (влево / вправо) я получаю эти три символа для каждой цитаты …

Я заметил, что это происходит с некоторыми объектами, но не с другими. Некоторые, которые представляют эту проблему &lsquo; &rdquo; $copy;, Некоторые, которые не представляют ту же проблему, &amp; $gt;,

Я пробовал разные кодировок но не мог найти тот, который будет работать для всех.

Что я делаю неправильно? Есть ли способ заставить его работать для всех сущностей? Или хотя бы все «общие»?

Благодарю.

0

Решение

Это должно быть хорошо:

function mb_str_split($string) {
return preg_split('/(?<!^)(?!$)/u', $string );
}
$string = 'My string &lsquo;to parse&rsquo;';
$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 или regex.

Доказательство: https://3v4l.org/3FRmG

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]