Символы php preg_split и UTF-8
Кто-нибудь может объяснить, почему этот код
$string='6аd_ТЕХТ GOOD_TEXT';
$words = preg_split('/\s+/', $string, NULL, PREG_SPLIT_NO_EMPTY);
var_dump($words);
дисплеи
array(2) { [0]=> string(8) "6àd_ÒÅÕÒ" [1]=> string(9) "GOOD_TEXT" }
вместо
array(2) { [0]=> string(8) "6аd_ТЕХТ" [1]=> string(9) "GOOD_TEXT" }
Я читал об этой проблеме, но добавив / U:
preg_split('/\s+/', $string, NULL, PREG_SPLIT_NO_EMPTY);// '/\s+/'
становиться
preg_split('/\s+/u', $string, NULL, PREG_SPLIT_NO_EMPTY);// '/\s+/u'
не помогает Как исправить эту проблему?
Спасибо.
2 ответа
В вашем коде происходит что-то еще, чего нет в представленном примере. Протестировал предоставленный пример, и он работает как положено. На случай, если это действительно происходит (и нет другого кода, влияющего $string
), это может быть ошибка в конкретной версии PHP, которую вы используете, и может быть решена путем обновления PHP (но маловероятно, что это проблема с PHP).
... Я сказал, что это косая черта, но, видимо, это был материал utf-8, который заставил его работать.
РЕДАКТИРОВАТЬ: я удалил остальные и обнаружил, что все, что мне нужно, это строка XML, чтобы она работала в браузере.
<?php
ini_set('default_charset','utf-8');
header('Content-type: text/html; charset=utf-8');
echo '<?xml version="1.0" encoding="UTF-8"?'.'>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head><body><pre>
';
$string = "6аd_ТЕХТ GOOD_TEXT";
var_dump(preg_split('/\s+/u', $string, NULL, PREG_SPLIT_NO_EMPTY));
echo '</pre></body></html>';
Это вывод:
array(2) {
[0]=>
string(13) "6аd_ТЕХТ"
[1]=>
string(9) "GOOD_TEXT"
}