Перевод из utf-8 в win-1251 - вылезают буквы "В"

Статус
В этой теме нельзя размещать новые ответы.

pierrevk

Постоялец
Регистрация
22 Сен 2009
Сообщения
59
Реакции
5
Перепробовал кучу комбинаций - чертовщина какая-то!
Перевожу код из utf-8 в win-1251, всё нормально, за исключением непечатаемых символов, типа " " (неразрывный пробел). Пробовал trim предварительно, пробовал вычищать это сочетание регуляркой - ничего не помогает. Если в оригинальном документе в source я вижу  , то в декодированном тексте оно предращается в "В "
То есть текст нашпоговывается буквами "В"! Как вылечить?

ПС: Для перевода текста из utf-8 в win-1251 использую такой код:

PHP:
function utf8_win1($s) {
$s=strtr($s,array("\xD0\xB0"=>"а", "\xD0\x90"=>"А", "\xD0\xB1"=>"б", "\xD0\x91"=>"Б",
 "\xD0\xB2"=>"в", "\xD0\x92"=>"В", "\xD0\xB3"=>"г", "\xD0\x93"=>"Г", "\xD0\xB4"=>"д",
 "\xD0\x94"=>"Д", "\xD0\xB5"=>"е", "\xD0\x95"=>"Е", "\xD1\x91"=>"ё", "\xD0\x81"=>"Ё",
 "\xD0\xB6"=>"ж", "\xD0\x96"=>"Ж", "\xD0\xB7"=>"з", "\xD0\x97"=>"З", "\xD0\xB8"=>"и",
 "\xD0\x98"=>"И", "\xD0\xB9"=>"й", "\xD0\x99"=>"Й", "\xD0\xBA"=>"к", "\xD0\x9A"=>"К",
 "\xD0\xBB"=>"л", "\xD0\x9B"=>"Л", "\xD0\xBC"=>"м", "\xD0\x9C"=>"М", "\xD0\xBD"=>"н",
 "\xD0\x9D"=>"Н", "\xD0\xBE"=>"о", "\xD0\x9E"=>"О", "\xD0\xBF"=>"п", "\xD0\x9F"=>"П",
 "\xD1\x80"=>"р", "\xD0\xA0"=>"Р", "\xD1\x81"=>"с", "\xD0\xA1"=>"С", "\xD1\x82"=>"т",
 "\xD0\xA2"=>"Т", "\xD1\x83"=>"у", "\xD0\xA3"=>"У", "\xD1\x84"=>"ф", "\xD0\xA4"=>"Ф",
 "\xD1\x85"=>"х", "\xD0\xA5"=>"Х", "\xD1\x86"=>"ц", "\xD0\xA6"=>"Ц", "\xD1\x87"=>"ч",
 "\xD0\xA7"=>"Ч", "\xD1\x88"=>"ш", "\xD0\xA8"=>"Ш", "\xD1\x89"=>"щ", "\xD0\xA9"=>"Щ",
 "\xD1\x8A"=>"ъ", "\xD0\xAA"=>"Ъ", "\xD1\x8B"=>"ы", "\xD0\xAB"=>"Ы", "\xD1\x8C"=>"ь",
 "\xD0\xAC"=>"Ь", "\xD1\x8D"=>"э", "\xD0\xAD"=>"Э", "\xD1\x8E"=>"ю", "\xD0\xAE"=>"Ю",
 "\xD1\x8F"=>"я", "\xD0\xAF"=>"Я"));
return $s;
}
 
str_replace("В ",' ',$s);
 
str_replace("В ",' ',$s);

Спасибо, уже пробовал.
Не знаю почему, видимо конструкция языка такова.. не работает str_replace как показано выше. Что угодно меняет, а вот   распознает сразу же как конструкцию языка, я так думаю, и менять не хочет!

И не только неразрывный пробел.
То же самое касается кавычек, к примеру, значков копирайта итп...
 
А таким образом не пробовали переводить
PHP:
iconv("utf-8","cp1251",$text)
 
А таким образом не пробовали переводить
PHP:
iconv("utf-8","cp1251",$text)

Вот черт! Столько мучался, а решение - красота! Благодарю, работает!

Пробовал однажды эту функцию для перевода из кои, или чего-то отличного... она не заработала, дала результат-не фонтан, так скажу. И я на нее забил...

Спасибо!
 
Я тут где-то в соседней теме уже публиковал функцию, которая перекодирует из win в utf вне зависимости от настроек сервера. Вот аналогичная для перекодировки из utf в win:
 
Ребят, в очередной раз взываю о помощи.
При конвертации из utf в win1251 через iconv у меня случается затык.

Дело в том, что тексты на французском, немецком, итальянском... У них в utf встречаются символы странные, вроде è, é, ê и тому подобные.

Подключил использовать str_replace('Ø', 'D', $content) и заменять зловредные символы...

Но вот затык в чем. наткнулся я на символ Ø.
он виден совсем криво - отображается на сайте оригинале как Ø, а у меня в обрабатываемом тексте как "Г�". И не могу ничего с ним сделать. Я бы и забыл про него, но когда функция iconv на него натыкается, процесс конвертации останавливается и вся часть текста, подлежащего конвертации, следующего после сего символа теряется.

Что тут можно поделать?
 
Нашел решение простое до ужаса.

PHP:
$content=iconv("utf-8","cp1251//TRANSLIT",$content);

//TRANSLIT - и все неизвестные символы обрабатываются транслитом без проблем)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху