Символы 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"
}
Другие вопросы по тегам