Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SUBSTRING кодировка utf8 обрезка символов 
V
    Опции темы
CPlusPlusFAN
Дата 17.10.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

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



Здравствуйте!

У меня используется кодировка utf8 и в полях содержится русский текст (сравнение utf8_general_ci). Если я делаю в выборке SUBSTRING с нечётной длиной (стартовый символ 1), то символы обрубаются и на вывод поступает квадратик в конце. Хотя тут написано, что функция multi-byte safe т.е., как я понимаю, должна выделять символы в случае с многобайтовым размером. Получается, что там параметр не количество символов, а количество байтов. То же относится и к стартовому символу (если 2, то обрубается пополам первый символ).
Версия мускла: 5.1.41

Может, я что-то не так делаю?

user posted image
Тут походу так же. :(

Это сообщение отредактировал(а) CPlusPlusFAN - 17.10.2010, 21:05
PM MAIL ICQ Jabber   Вверх
unicross
Дата 17.10.2010, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Запрос 
Код
SET NAMES utf8

в начале всех скриптов делаете? Скорее всего нет...  Проверяйте кодировку файла с программой и реальные данные уже записанные ранее. Если кодировка файла не UTF-8, то нужно указать в запросе соответствующую кодировку.

Следующий PHP-скрипт, сохраненный в кодировке UFT-8 без BOM, отрабатывает без всяких "квадратиков":
Код
<?php
header('Content-Type: text/html; charset=utf-8');
if ($db = @mysql_connect("localhost", "root", "")) {
   mysql_select_db("test");
   mysql_query("SET NAMES utf8");
   $res = mysql_query('SELECT id, SUBSTRING(str, 1, 3) FROM `test`');
   while ($pole = mysql_fetch_array($res)) {
      echo $pole[0] . ' – ' . $pole[1] . '<br>';
   }
   mysql_close($db);
}
else {
   echo "Не удалось установить подключение к базе данных";
}
?>

Таблица:
Код
CREATE TABLE `test` (
  `id` int(11) auto_increment,
  `str` char(255),
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

PM MAIL WWW   Вверх
CPlusPlusFAN
Дата 18.10.2010, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 315
Регистрация: 1.11.2005
Где: Воронеж

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



Цитата(unicross @  17.10.2010,  22:06 Найти цитируемый пост)
в начале всех скриптов делаете? Скорее всего нет...

делаю. текст нормально отображается, но вот обрезается не так, как надо.

Цитата(unicross @  17.10.2010,  22:06 Найти цитируемый пост)
Если кодировка файла не UTF-8, то нужно указать в запросе соответствующую кодировку.

Все файлы кодированы в утф8. это стандартная юникс кодировка.

Текстовые данные представлены у меня типом TEXT и LONGTEXT.

У меня все файлы по умолчанию создаются без BOM.

Щас я попробую ваш скрипт. Только в пхпмайадмин и SqlBrowser'е данные в виде закарючек. Это затрудняет заполнение, так что буду через скрипт.

ЗЫ пока дописывал камент, кое-что попробовал:
у меня было
Код

SET NAMES='utf-8'

я переставил, как у вас и у меня на выходе появились каракули. Так что у меня есть одна мысль. Сейчас попробую.

Добавлено @ 01:50
Хех. :(
Всё заработало. Предполагаю, что из-за кривой настройки кодировки в запросе у меня данные перекодировались в вин1251 вроде. А в базе данные и хранились в таком виде, поэтому они и отображались кракозябрами. А я грешил на пхпмайадмин :(. Ну и соответственно обрезались побайтно, ведь формат был однобайтовый. А затем в пхп преобразовывалось в утф8, что и дало кривую обрезку.

Так что да, проблема была именно в том, что я не поставил кодировку в начале.

unicross, от меня плюсик.

ЗЫ А на форуме-то проблемка осталась. ;)

Это сообщение отредактировал(а) CPlusPlusFAN - 18.10.2010, 01:55
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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