Что не так с функцией iconv?

FleX

Guest
Что не так с функцией?

Вот юникод:
%u0442%u0435%u0441%u0442 %u0441%u043D%u043E%u0432%u0430 ...
Его можно сконвертить этой ф-ей в видновую код.:

function convert($text)
{
return iconv("UCS-2","windows-1251",preg_replace("/%u([0-9A-Z][0-9A-Z])([0-9A-Z][0-9A-Z])/ie","chr(hexdec('\\1')).chr(hexdec('\\2'))",$text));
}

Но почему-то в итоге ф-я возвращает только первое слово, а второе и последующие(если есть) обрезает.
В чем трабл?
 

ys

отодвинутый новичок
А из каких религиозных соображений не подошла такая функция?
http://ru.php.net/manual/en/function.iconv.php
 

FleX

Guest
Originally posted by ys
А из каких религиозных соображений не подошла такая функция?
http://ru.php.net/manual/en/function.iconv.php
Проблема в том, что вот это возвращает мне слово "Привет"
Хотя следовало бы "Привет как жизнь":
iconv("UCS-2", "CP1251", "%u041F%u0440%u0438%u0432%u0435%u0442 %u043A%u0430%u043A %u0436%u0438%u0437%u043D%u044C");
 

FleX

Guest
Originally posted by Yurik
str_replace заюзай вместо регов
Если бы еще понимал для чего все эти реги и реплейсы нужны!
Что они делают я знаю, но вот зачем они тут - не понимаю.
Ф-я то не моя:(
 

Кром

Новичок
FleX
Замени все пробелы на %u0020, а потом уже перекодируй текст.
 

FleX

Guest
Originally posted by Кром
FleX
Замени все пробелы на %u0020, а потом уже перекодируй текст.
Спасибо огромное.
Ты я вижу - профи.
Может подскажи заодно пожалуйста:
пока функция конвертит из UCS-2. Но ведь есть и другие
виды юникода, например UTF-8. А как можно проверить в каком из этих форматов поступила строка, чтобы знать, что указать в iconv?
 

FleX

Guest
Кстати, у функции ещё один глюк:

Если в поступившей строке есть цифры,
то конвертится только часть строки до первой попавшейся цифры, а остальное киляется.


На входе это:
"%u041C%u043D%u0435 20 %u043B%u0435%u0442. Yes!"
Из этого получается только слово: "Мне"
А надо бы: "Мне 20 лет. Yes!"

Какие мысли будут?
 

fixxxer

К.О.
Партнер клуба
хм...
preg_replace("/%u([0-9A-F]{2})([0-9A-F]{2})/ie","iconv('UCS-2','windows-1251',chr(hexdec('\\1')).chr(hexdec('\\2')))", $s)
 

гоша

Guest
chr(hexdec('\\1')) --> chr(0x$1) :)

а вообще есть мнение, что для конвертации только русских букв не надо поднимать iconv, а просто заменять по таблице.
 
Сверху