Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Сортировка utf-8
Форумы портала PHP.SU » » Кодировки и все смежное » Сортировка utf-8

Страниц (1): [1]
 

1. dumkan - 13 Октября, 2013 - 19:42:59 - перейти к сообщению
пытаюсь отсортировать символы с слове таким образом:

echo $word;
$chars=str_split($word);
sort($chars);
$anagramma=implode('',$chars);
echo $anagramma;

$word выводит правильно, вместо $anagramma - крякозябы, причем символов по количеству в 2 раза больше чем в исходном слове. Я так понимаю из-за многобайтной кодировки.

если перекодировать в windows-1251 то все проходит нормально:

echo $word;
$chars=str_split(iconv('UTF-8','windows-1251',$word));
sort($chars);
$anagramma=iconv('windows-1251','UTF-8', implode('',$chars));
echo $anagramma;

Мне кажется так не совсем правильно. Есть ли правильное, элегантное решение?
2. Deonis - 13 Октября, 2013 - 23:17:04 - перейти к сообщению
Не знаю, насколько можно назвать решение элегантным, но можно так:

PHP:
скопировать код в буфер обмена
  1. $word = 'Абракадабра';
  2. preg_match_all('#[а-яё]#iu', $word, $chars);
  3. sort($chars[0]);
  4. $anagramma = implode('',$chars[0]);
  5. echo $word . '<br>' . $anagramma;


Или может таким макаром:

PHP:
скопировать код в буфер обмена
  1. $word = 'Слово';
  2. $chars = preg_split('//u', $word, -1, PREG_SPLIT_NO_EMPTY);
  3. sort($chars);
  4. $anagramma = implode('',$chars);

 

Powered by ExBB FM 1.0 RC1