Кодовки и использоване iconv

ХакИрФсимагущий

[засикречино]
Кодовки и использоване iconv

Ко мне поступают данные в переменную в разных кодиовках
utf-8
win-1251
мне надо их вывести на экран в кодировке win-1251
Но вот проблема: Если я обрабатываю функцией iconv("UTF-8", "windows-1251", $переменная)
То в одном случае
'/маникюр/' до перекодировки
'/маникюр/' после

В другом
'/маникюр/' до перекодировки
'/' после

А вот тут проблема. Как решить эту проблему?

-~{}~ 08.10.10 21:36:

Решил эту проблему вот так предпологаю, что это говнокод, но альтернативы не нашел пока.((( Но уверен есть более рациональное решение я бы сам написал, но понятия не имею как побайтово можно опрделять кодеровки.
function forwin($s){
$s1=$s;
$s=urlencode($s);
$j=strlen($s);
$k=strlen(str_replace(array("%D0","%D1"),array('',''),strtoupper($s)));
if ($k>0){
$m=$j/$k;
if (($m>1.2)&&($m<2.2)){$s1=iconv("UTF-8", "windows-1251", $s1);}
}
return $s1;
}
 

ХакИрФсимагущий

[засикречино]
Спасибо, первый раз вижу за седня такой прямой ответ))
А вот опредилить сколько бит в строке можно? просто хотелось бы реализовать эту функцию минуя urlencode($s)- мне кажется что она тут лишняя
 

Вурдалак

Продвинутый новичок
Можно лишь эмпирически предположить, что данная строка в кодировке UTF-8. Например, тут пример regex'а.

Но определить невозможно.
 

ХакИрФсимагущий

[засикречино]
Интуиция мне подсказывает, что там пример фильтрации от не нужных символов. Впрочем теперь мне извесно, что 1 символ в ютф 8 записывается от 1 до 3 бит.

А вот что значит?:

Но определить невозможно.

Нельзя узнать сколько в строке байт?
 

Вурдалак

Продвинутый новичок
По ссылке оранжевым по серому написано что делает функция.

1 символ UTF-8 занимает от 1-го до 4-х байт на практике и до 6-ти байт в теории.
 

ХакИрФсимагущий

[засикречино]
У мня глюки или ссылка поменялась)))) Спс шас почитаю

-~{}~ 09.10.10 20:59:

не помогло( работает только старый вариант.

И всетаки как опрелелить количество байт в строке?
и Как посмотреть строку в виде \x1A\xD3...

-~{}~ 09.10.10 21:45:

хтя ну и фиг с ним полюбому для просмотра строки ввиде \x1A\xD3 понадобится функция по быстродействию примерной urlencode
 

fixxxer

К.О.
Партнер клуба
Если известно, что строка на русском языке, то кодировка определяется элементарно :)

открой в hex-редакторе рядом, скажем, текст своего поста в utf-8 и 1251, и сам поймешь.

алсо, [m]count_chars[/m], [m]substr_count[/m].
 

ХакИрФсимагущий

[засикречино]
ну дык я примерно так и определяю только используя урл енекоден, что скорее всего не очень практично. Но думаю что практичнее в hex все это делать.

-~{}~ 09.10.10 23:15:

fixxxer
а эти функции мультибайтово шитают байты или символы они шитают
 

fixxxer

К.О.
Партнер клуба
Байты (но в случае с включенным mbstring.overload вторая может быть и алиасом mb_substr_count - тогда orig_substr_count).
 
Сверху