Блог. Разбор примера

Попробовал блог запустить.

  1. В конфиге приложения надо прописывать базу данных.

  2. Нужно создавать базу данных (в папке yii/demos/blog/protected/data ) лежит sql соответствующий.

Но нашлась одна проблема: кириллицу не любит.

Вроде нашел проблему. Кроется она в этом коде моделей Comment и Post:

	protected function beforeValidate($on)


	{


		$parser=new CMarkdownParser;


		$this->contentDisplay=$parser->safeTransform($this->content);


		if($this->isNewRecord)


		{


			$this->createTime=$this->updateTime=time();


			$this->authorId=Yii::app()->user->id;


		}


		else


			$this->updateTime=time();


		return true;


	}

Но и убирать эту строчку

$this->contentDisplay=$parser>safeTransform($this->content);

нельзя.

Что делать? Как заставить правильно работать с кириллицей?

p.s.

базы в utf-8

А в чем не любовь-то выражается?

Если использовать SQLlite, которая уже настроена по умолчанию, то все работает на ура, т.е. вообще ничего дополнительно делать не нужно, кроме включения pdo в php.ini. Если хотите прикрутить к mysql, то проблема должна быть исключительно в настройках базы. Код здесь ни при чем. У меня на mysql все завелось также с полпинка.

Quote

А в чем не любовь-то выражается?

Если использовать SQLlite, которая уже настроена по умолчанию, то все работает на ура, т.е. вообще ничего дополнительно делать не нужно, кроме включения pdo в php.ini. Если хотите прикрутить к mysql, то проблема должна быть исключительно в настройках базы. Код здесь ни при чем. У меня на mysql все завелось также с полпинка.

А у меня - нет.

В базе (таблица Post) хранятся два значения:

  1. Необработанное ( $this->content)

  2. Обработанное safeTransform() ($this->сontentDisplay)

Если исправить view'ы и поставить вместо $this->сontentDisplay, $thos->content, то все пучком.

Если сравнить значения $this->сontentDisplay и $this->content в базе, видно, что после обработки $this->сontentDisplay - куда-то удаляются русские символы и добавляется обрамляющий <p></p>

И еще… Если напрямую в базу прописать кириллицу, все отлично отображает.

И заголовки нормально отображает… О, кстати.

Странно как-то… А какая кодировка в системе по умолчанию?

Попробуй после соединения с базой отправить запрос SET NAMES utf8, может быть получится… у меня это решало проблему крякозябров ( хотя и в системе и в БД использовалась одна и та же кодировка).

Quote

Если сравнить значения $this->сontentDisplay и $this->content в базе, видно, что после обработки $this->сontentDisplay - куда-то удаляются русские символы и добавляется обрамляющий <p></p>

И еще… Если напрямую в базу прописать кириллицу, все отлично отображает.

И заголовки нормально отображает… О, кстати.

Если поле content содержит данные в UTF-8, а поле contentDisplay нет, то с базой должно быть все окей. С кодом (оригинальным), как говорилось, тоже все все порядке. Скорее всего, ошибка происходит до обработки скриптами данных, получаемых от браузера.

Проверьте настройки кодировки браузера для страницы. Возможно, то, что он отправляет в форме, вырезается при проверке. Кроме того, посмотрите, какие данные и в какой кодировке браузер отправляет на сервер при отправке формы. Тупо выведите весь $post в представлении. В крайнем случае, сделайте все сызнова: обновите бд и скрипты блога.

Quote

Если поле content содержит данные в UTF-8, а поле contentDisplay нет, то с базой должно быть все окей. С кодом (оригинальным), как говорилось, тоже все все порядке. Скорее всего, ошибка происходит до обработки скриптами данных, получаемых от браузера.

Проверьте настройки кодировки браузера для страницы. Возможно, то, что он отправляет в форме, вырезается при проверке. Кроме того, посмотрите, какие данные и в какой кодировке браузер отправляет на сервер при отправке формы. Тупо выведите весь $post в представлении. В крайнем случае, сделайте все сызнова: обновите бд и скрипты блога.

Сделал проще:

$parser=new CMarkdownParser;


echo $parser->safeTransform('ЫЫыыыsssssыыыы');

вывело вот что:

Quote

<p>sssss</p>

Похоже, баг… или где-то настройки надо менять.

Или (что очень не понятно) почему-то мой denwer криво работает с utf-8.

Хм… на серваке с sqlite - проблем не возникло с кириллицей.

Походу, денвер выпендривается.

Ща попробую еще mysql погонять.

Все… нашел)

Первое, надо прописать в Денвер:\usr\local\mysql5\my.cnf

вот такое чудо:






# ==============================================================


# === БЫЛО === default-character-set = cp1251


# ==============================================================


default-character-set = utf8


character-sets-dir = /usr/local/mysql4/share/charsets





#


# Параметры MySQL-сервера.


#


[mysqld]


# Использовать режим совместимости с клиентами MySQL 3.x и MySQL 4.0.


old-passwords





# Кодировка баз данных по умолчанию.


default-character-set = utf8 # было cp1251


init-connect = "set names utf8" # было cp1251





Второе:

нужно сделать .htaccess с такой строчкой:

Quote

AddDefaultCharset utf-8

либо использовать 1251)))

нет! только утф8! Уменьшает количество проблем в разы :)

Имхо, можно сделать еще проще:

В конфиге main.php прописать:



...


		'db'=>array(


              ...


            'charset'=>'utf8')


Не запускаеться блог блин , пишет YiiBase::include(PDO.php) [<a href='function.YiiBase-include'>function.YiiBase-include</a>]: failed to open stream: No such file or directory

вроде там все поумолчанию должно устанавливаться, или я че то не понял. У меня на винде все и не денвер а собственная подборка (Apach и MySQl )

а расширение PDO установлено (хотя оно по дефолту должно быть в пятом пхп)??

PDO  было закоменчено, Xomaa: спс )

Мот еще подскажите, я с командной строкой ни как не подружусь у меня локальные проекты лежат на c:/www/_httpdocs/test

как тогда запускать "Запускаем yiic в консоли со следующими параметрами: % YiiRoot/framework/yiic webapp WebRoot/testdrive"

необходимо перейти в каталог с твоим Yii проектом (который создавался yiic webapp <название твоего проекта>) и оттуда запустить шелл:

<путь к каталогу где установлен сам Yii>/framework/yiic shell

Запускать шелл и все команды необходимо именно из каталога проекта!

Quote

Запускать шелл и все команды необходимо именно из каталога проекта!

Не обязательно, можно просто указывать путь к файлу индекс.пхп твоего проекта. Во всяком случае, в доках написано что можно ;)

да точно! совсем забыл о такой возможности! ;)

Так у меня запускаеться Батник и ничего не спрашивает, что и куда. И отрабатывает ничего не делая. И я чето не понял какой shell у меня винда же. (извиняюсь конечно за свое ламерство  :) )

shell - это одна из опций yiic-а, при запуске yiic shell - должно открыться что-то типа командной строки (не командный шелл твоей ОС, а “шел” (подобие) реализованный в Yii), которая может принимать команды Yii или произвольный php-код. Покажи плз, строку как ты все это запускаешь???

CLI установлено?? Еще…php.exe есть в переменной path???

CLI - сорри,  это  ты про cmd.exe? Куда строку писать в CMD ?  запускаю батник энтером