DbHelp.ru
Маленький Yii блог
Комментарии
Гость: https://siteko.online/moskva-rostokino-kupit-zakladku-molly-mdma-hq.html Мощные | Семен...
Гость: [url=http://mewkid.net/when-is-xicix/]Amoxicillin[/url] Amoxicillin 500mg Capsules owg.dcxl.dbhelp.r...
Гость: [url=http://mewkid.net/when-is-xicix/]Buy Amoxicillin[/url] Amoxicillin 500mg Capsules wdf.jtjz.dbhe...
Гость: Всем привет!! преобразователь частоты управляет магнитными полями как известно нелинейность хар...
Гость: ebony amateur cheating porn insatiable amateur cheating wife best amateur cheating video ...



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Поблема с кодировкой на ZendServer

Рубрика: Разбор багов и ошибок

Оцените эту статью:

Рейтинг: 0.00 (0)
5 апр. 2009
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Yii Framework Blog img http://dbhelp.ruzendserver2 Пару дней назад столкнулся с очень распространенной проблемной среди разработчиков - кодировкой. Для меня эта проблема исчезла когда я начал вести все свои проекты на UTF-8 и забыл про существование такого слова как cp1251.

---

Yii Framework Blog img http://dbhelp.rua1a1 Но на моё удивление в базу кириллица мне перестала приходить. Я начал все по новому перепроверять. База данных у меня была в кодировке utf8_general_ci, все таблицы - в нейже. Даже сравнение на всех полях стояло utf8_general_ci..

Для того что бы Yii установило соединение в нужной кодировке в конфиге надо прописать:

'charset'=>'UTF8'

но и это у меня было прописанно!

Я попробовал добавить в табличку данные напрямую через phpMyAdmin - и они пришли в нормальной кириллице. На форуме поддержки Yii хорошие люди рассказали что phpMyAdmin при подключении сам говорит с какой кодировкой он будет работать.

Я подумал, а почему бы мне не залесть в кишки Yii и самому запросом не сказать что я хочу работать с UTF-8? Я так и сделал. Обычно кстати для этих целей служит файлик my.cnf - но в Zend Server-е я его к сожалению ненашол (его там скорее всего и нету).

Поэтому я открыл файл framework/db/CDbConnection.php и нашел функцию которая отвечает за соединение:

 

   protected function initConnection($pdo)
{
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if($this->emulatePrepare && constant('PDO::ATTR_EMULATE_PREPARES'))
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,true);
if($this->charset===null)
return;
switch(strtolower($pdo->getAttribute(PDO::ATTR_DRIVER_NAME)))
{
case 'pgsql':
$stmt=$pdo->prepare('SET client_encoding TO ?');
$stmt->execute(array($this->charset));
break;
case 'mysqli':
case 'mysql':
$stmt=$pdo->prepare('SET CHARACTER SET ?');
$stmt->execute(array($this->charset));
break;
}
}

Я её немного изменил чтобы по человечески сказать что я хочу UTF-8, и она у меня стала выглядеть вот так вот:

 

   /**
    * Initializes the open db connection.
    * This method is invoked right after the db connection is established.
    * The default implementation is to set the charset for MySQL and PostgreSQL database connections.
    * @param PDO the PDO instance
    */
   protected function initConnection($pdo)
   {
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      if($this->emulatePrepare && constant('PDO::ATTR_EMULATE_PREPARES'))
         $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,true);
      if($this->charset===null)
         return;
      switch(strtolower($pdo->getAttribute(PDO::ATTR_DRIVER_NAME)))
      {
         case 'pgsql':
            $stmt=$pdo->prepare('SET client_encoding TO ?');
            $stmt->execute(array($this->charset));
            break;
         case 'mysqli':
         case 'mysql':
            $stmt=$pdo->prepare('SET CHARACTER SET ?');
            $stmt->execute(array($this->charset));
            
            $pdo->query("set character_set_client='utf8'");
            $pdo->query("set character_set_results='utf8'");
            $pdo->query("set collation_connection='utf8_general_ci'");
            break;
      }
   }

После таких вот махинацией - данные в базу стали приходить в нормальном виде.

Также это была не единственная ошибка по которой портились данные еще и при выводе на экран. Для вывода я использовал всем знакомую функцию - htmlentities.

Почему то я думал что по умолчанию она должна понять что в неё приходит UTF. Оказалось нетак, что б работать с UTF надо указать обязательный третий парраметр.

Т.е. должно быть примерно вот так вот:

htmlentities($comments->text, null, "UTF-8")

После всех описанных выше махинаций - у меня всё стало работать как часы.



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. Авторский рецепт от pirrat и Sam Dark на популярную тему "DAO и модели"... next Читать "DAO и модели" [рус.] ... "DAO и модели"

  2. Очень часто мне приходится заставлять работать проекты с практически идентичной структурой базы данных. Когда хостинг накладывает на меня ограничение что ... "Используем префиксы для таблиц"

  3. Теперь и ты можешь принять участие в разработке любимого фреймворка! На официальном форуме было объявлено о внеплановом наборе новых лиц ... " Recruiting New Team Members "

[adm] zolter

Было сказано: Суббота, 04 апреля 2009

Вот кстати ссылка форум Yii где мы вместе решили эту проблему - http://www.yiiframework.com/forum/index.php/topic,1390.0.html

[guest] Akzhan

Было сказано: Среда, 10 июня 2009

разве не поможет одна команда

SET NAMES UTF8;

[adm] zolter

Было сказано: Среда, 10 июня 2009

Не, тогда она не помогла :)

[guest] 0utPunk

Было сказано: Четверг, 16 июля 2009

Я вылечил это строчкой AddDefaultCharset utf-8 в .htaccess, возможно, в Вашем случае тоже поможет.

[adm] zolter

Было сказано: Четверг, 16 июля 2009

Не, не поможет.
Ваш вариант не вылечит кодировку базы к сожалению :)

[guest] Гость

Было сказано: Четверг, 16 июля 2009

И правда, чего-то я запарился :)

[guest] Гость

Было сказано: Среда, 11 ноября 2009

Я не совсем понял какое отношение Zend Server имеет к MySQL? При установке MySQL не ставится автоматом (или я не прав?) По крайней мере когда я на сервер ставил Zend Server CE после него отдельно устанавливал MySQL Server и my.cnf лежал в etc. Поясните пожалуйста - мне это весьма интересно, так как на продакшен планирую на него скинуть проект на Yii (хотелось бы быть готовым к неожиданностям).

[adm] zolter

Было сказано: Четверг, 12 ноября 2009

Как видишь по скрину - я пользовался еще бетой когда он только появился и был полностью бесплатным. В то время как я его ставил - mysql поднимался вместе с Zend-ом, и была возможность управлять им через панель зенда. Я очень много файлов перелопатил но так отдельный конфиг-mysql-а не нашел что б исправить кодировку соединения. Поэтому пришлось править в самом движке Yii. На других вебсерверах все решается простой правкой конфига mysql

[guest] Гость

Было сказано: Суббота, 08 декабря 2018

Всегда больше и больше сообществ начинают активно продвигаться в Инстаграм.
Среди наших клиентов кушать сиречь риелторы ,
беспричинно и человек, занимающиеся продажей салонов красоты.
В связи с этим можно смело говорить, что большинство аккаунтов подходит для раскрутки в Инстаграм страниц.

ТУТ <a href=http://instagram99.ru>продвижение Инстаграм Казань</a>

Наша дилемма - пригнать в ваш Инстаграм страниц один целевых клиентов,
заинтересованных в вашем продукте, беспричинно чистый токмо такой подход
позволит вам брать заявки и продажи из Инстаграм сообществ.
Следовательно мы максимально качественно прорабатываем этот вопрос.
Около продвижении в Инстаграм бизнесов мы составляем изображение вашей целевой аудитории,
выявляем "места ее обитания" и начинаем общаться с ней при помощи рекламы у лидеров мнений, изза которыми следит ваша целевая клиенты и т.д.
Весь это позволяет нашим клиентам стяжать только живых подписчиков, реально заинтересованных в их продукте.
http://instagram99.ru - Раскрутка бизнеса в инстаграм

[guest] Гость

Было сказано: Суббота, 08 декабря 2018

Хоть каждую ключевую фраз в ТОПе поисковой системы всего 10 мест, а желающих попасть туда — тысячи.
Чем больше технический копирайтинг, тем усиленнее нужно денег и выше цена.
Некоторые ключевые правки сайта заносят миллионы долларов,
внешняя оптимизация, крупному опту и создание магазинов – отдельный новый покупатель работает показатели лет и много платит.
Такса зависит от: самих ключевых фраз (оценивается борьба); региона,в котором Вы хотите фигурировать для первых местах.
Создание и Продвижение сайтов в Яндекс дешево

<a href=http://prodvizhenie-caitov-moskva.ru/>продвижение сайта Москва</a>
Создание и Продвижение сайтов в Google быстро
Самые знания во всех топах интернет-маркетинга и возможности заказать продвижение сайта в поисковых системах или, проще говоря, SEO.
увеличение посещаемости;
через консультаций и аудитов и поведенческие факторы Маркетинг комплексной движением над выводом в internet сети вашего сайта,
социальной странички alias компании в целом
Крутой опыт в области этих услуг позволяет нам давать всё в комплексе.
Fulfilment маркетинг и познавание бизнес процессов позволяет нам обеспечивать успех!
http://prodvizhenie-caitov-moskva.ru/ - купить разработка и продвижение магазинов Московская область

[guest] Гость

Было сказано: Суббота, 29 декабря 2018

Раскрутка и Создание сайта в Google быстро
Из-за влияния результатов поиска на ваши веб-страниц веб мы предлагаем несколько факторов, которые полностью продвигают ваш сайт. Интернет веб-сайт может быть разработан Создание как профессиональный веб-сайтов, но если у вас нет кого-то другого, вам придется потратить деньги на создание источника в Интернете.
Более 350 организаций в России стали нашими партнерами. Мы наняли более 34 отличных специалистов для разработка нашего страниц веб и посвятили себя достижению наилучших результатов. Цель: стать лидером в онлайн-маркетинге сферах. Миссия: Развивайте свои возможности, расширяя свой бизнес и своих ядро, быстро выводить Лучшие услуги на рынке онлайн-маркетинга. Почему я: агентство не назначаем пустую встречу. Следовательно Если это слов, мы несем ответственность за результатов Вконтакте.
<a href=http://prodvizhenie-caitov-moskva.ru/>продвижение и раскрутка сайта по Москве </a>
ядро могут быть приобретены у вашего оператора. Если вы идете в Instagram, которая хочет давать определенную сумму дохода сферах поведенческих факторов, вам не нужно беспокоиться о расти ваших онлайн-сайтов в будущем желаний. Если мы хотим раскрутка на нашем сайтов, мы предоставим положительные результаты для всей работы, выполненной в оговоренные сроки.
Следовательно Контекстная реклама - Такса это один из самых быстрых способов усилением трафика ваших клиент и лучших магазинов словосочетаний. Вы можете раскруткой свой порталов, перепродавая и запрашивая напрямую у Яндекс, Google AdWords, Instagram, MailRu.
заказать создание и обслуживание сайтов в Москве http://prodvizhenie-caitov-moskva.ru/ - КЛИКАЙ

[guest] Гость

Было сказано: Четверг, 03 января 2019

Фирма - Первое маркетинговое агентство в Москве создает страниц веб ради SEO деятельности. Общество была создана в 1785 году компанией Spider's web Studio. Мы готовим профессиональные место в Москве ради работы в разных регионах России. Сейчас разработаем отраслевые планы конверсия, прогнозы трафика, конверсия и семантический анализ. Мы создали профессиональные веб- порталов, онлайн-акции, без ссылочных бюджетов, методы черного тож серого маркетинга, с правильной технологией, оптимизацией качества слов и идеальной технологией ради интернет-проектов, маркетинга и структуры клиентов MailRu, Instagram. Вы должны хвалить каждую деталь. Мы продвижением такой магазинов. Вы не должны двигаться для сделка полностью быстро.
Заказать этот сайтов продвигает много ключевых слов и выводов из ТОП-5 поисковых систем Яндекса и Google. Предположим, когда клиент в «Веб-студии Москва» впервые запрашивает развертывание веб-страниц веб дешево
<a href=http://prodvizhenie-caitov-moskva.ru/>стоимость SEO продвижения сайта </a>
Это изделие всех направлений, поисковой системы и социального маркетинга. Создавайте хорошие проекта и изображения в Интернете, а также в словосочетаний, порталах и форумах MailRu, MailRu..
Продвигайте особенный порталов с помощью различных методов белого маркетинга, включая контекстную рекламу. Коли вы выберете эту аналитика, вы будете выплачивать по приложению, которое вы получили, иначе сообразно телефону Instagram, Вконтакте низкая цена.
Мы считаем, что сила Интернета может помочь вам развить частный бизнес. Никто не сомневается в часть, который Интернет является бесконечным и мощным средством коммуникации и огромной маркетинговой платформой словосочетаний, а решения в области безопасности, несомненно, доставят бизнес новым и существующим жертвам низкая цена .
заказать создание и продвижение сайтов в Москве http://prodvizhenie-caitov-moskva.ru/ - здесь!

Оставить комментарий


Код:
Имя: