Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UTF8toCP1251($str) Обрезает слово на 7м символе 
V
    Опции темы
DiMoN_TD
Дата 5.8.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Добрый день. Столкнулся вот с какой я проблемой:

Почему-то, когда я пытаюсь декодировать из utf8 в cp1251, то русские слова (которые состоят из 7 букв), все нормально декодируется, зато как только больше букв, то обрезается на 7й букве слово (уже декодированное)

Т.е. если я декодирую из utf8 слово "Асмодей" функцией UTF8toCP1251 , то на выходе и получаю слово "Асмодей", но если я пытаюсь этой же функцией декодировать слово "Асмодейко", то у меня на выходе получает "АсмодейР".

Сама функция:

Код

function UTF8toCP1251($str){ // by SiMM, $table from http://ru.wikipedia.org/wiki/CP1251
  static $table = array("\xD0\x81" => "\xA8", // Ё
                        "\xD1\x91" => "\xB8", // ё
                        // украинские символы
                        "\xD0\x8E" => "\xA1", // Ў (У)
                        "\xD1\x9E" => "\xA2", // ў (у)
                        "\xD0\x84" => "\xAA", // Є (Э)
                        "\xD0\x87" => "\xAF", // Ї (I..)
                        "\xD0\x86" => "\xB2", // I (I)
                        "\xD1\x96" => "\xB3", // i (i)
                        "\xD1\x94" => "\xBA", // є (э)
                        "\xD1\x97" => "\xBF", // ї (i..)
                        // чувашские символы
                        "\xD3\x90" => "\x8C", // Ӑ (А)
                        "\xD3\x96" => "\x8D", // Ӗ (Е)
                        "\xD2\xAA" => "\x8E", // Ҫ (С)
                        "\xD3\xB2" => "\x8F", // Ӳ (У)
                        "\xD3\x91" => "\x9C", // ӑ (а)
                        "\xD3\x97" => "\x9D", // ӗ (е)
                        "\xD2\xAB" => "\x9E", // ҫ (с)
                        "\xD3\xB3" => "\x9F", // ӳ (у)
                       );
  return preg_replace('#([\xD0-\xD1])([\x80-\xBF])#se',
                      'isset($table["$0"]) ? $table["$0"] :
                       chr(ord("$2")+("$1" == "\xD0" ? 0x30 : 0x70))
                      ',
                      $str
                     );
}


С чем это может быть связано?
PM MAIL   Вверх
WIPS
Дата 5.8.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 22.5.2006
Где: Украина, Киев

Репутация: 1
Всего: 8



Попробуй с модификатором для юникода:
Код

'#([\xD0-\xD1])([\x80-\xBF])#use'

вдруг поможет
--------------------
Автопроизводители, машины, марки, модели!
PM MAIL WWW ICQ Skype   Вверх
DiMoN_TD
Дата 5.8.2009, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



WIPS
Нет, не помогло, при замене той строки, функция на выходе вообще ничего не выдает :(

Может есть еще какие-то варианты?
PM MAIL   Вверх
nerezus
Дата 5.8.2009, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43





--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
DiMoN_TD
Дата 5.8.2009, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



nerezus
Установлено

iconv
iconv support                    enabled
iconv implementation    "libiconv"
iconv library version    1.9

Directive    Local Value    Master               Value
iconv.input_encoding    ISO-8859-1    ISO-8859-1
iconv.internal_encoding    ISO-8859-1    ISO-8859-1
iconv.output_encoding    ISO-8859-1    ISO-8859-1
PM MAIL   Вверх
gcc
Дата 5.8.2009, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



substr

substr ($line, 0, 6);

http://us2.php.net/manual/en/function.substr.php

Это сообщение отредактировал(а) gcc - 5.8.2009, 23:32
PM WWW ICQ Skype GTalk Jabber   Вверх
DiMoN_TD
Дата 5.8.2009, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



gcc, это ты про то? smile

Добавлено через 2 минуты и 18 секунд
gcc, пляха муха, а ты прав оказался! smile
Спасибо. Проблема была в том, что я обрезал ненужное кол-во символов (у меня макс. могло находиться 15 символов). Но я не учел, что при перекодировке, символов будет больше, нежели я ввел. Все.. проблема решена! Всем спасибо.
PM MAIL   Вверх
gcc
Дата 5.8.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



убрать все после 7 символа
Обрезает слово на 7м символе
PM WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0958 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.