<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[PunBB по-русски &mdash; Заготовка FAQ по UTF-8]]></title>
		<link>http://punbb.ru/topic1222-zagotovka-faq-po-utf8.html</link>
		<description><![CDATA[Недавние сообщения в теме «Заготовка FAQ по UTF-8».]]></description>
		<lastBuildDate>Sun, 20 Jul 2008 15:51:06 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post19250.html#p19250</link>
			<description><![CDATA[<p>Хочу ещё немного от себя добавить. Некоторые браузеры, в частности Опера (и возможно, Firefox) считают BOM в файле <span class="bbu">важней</span> кодировки в [mono]&lt;meta&gt;[/mono]. Может возникнуть ситуация, когда файлы по факту сохранены в 1251, в базу/из базы данные передаются верно, даже AddDefaultCharset в .htaccess есть, а русский в браузере всё равно нечитабелен.</p><p>Проблема в редакторах, некорректно работающих с UTF-8, вроде встроенного в WinSCP. С его медвежьей услугой файл в 1251 может иметь BOM (!) - столкнулся однажды на практике. Пользуйтесь правильными редакторами.</p>]]></description>
			<author><![CDATA[dummy@example.com (Freeman)]]></author>
			<pubDate>Sun, 20 Jul 2008 15:51:06 +0000</pubDate>
			<guid>http://punbb.ru/post19250.html#p19250</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post18819.html#p18819</link>
			<description><![CDATA[<p>Нашел очень интересную библиотечку для PHP. Пригодится тем несчастным, у которых по какой-то причине не может быть установлено расширение <strong>mbstring</strong>, с помощью библиотечки можно создать свои работающие заглушки mb_* функций, а также для написания &quot;<strong>цензуры</strong>&quot; для русского языка. </p><p>Форум «Лаборатории dk»: <a href="http://punbb.ru/redirect-b42d0784fe860d87b39eb98af595c3c68425f517-18819.html" target="_blank">php-функции для обработки текста в кодировке UTF-8</a></p><p><strong>must have!</strong> ссылку нашел через <a href="http://punbb.ru/redirect-f15932c2acec38b34ebed568d7a28041fcf5876f-18819.html" target="_blank">блог Жилинского</a></p>]]></description>
			<author><![CDATA[dummy@example.com (artoodetoo)]]></author>
			<pubDate>Wed, 04 Jun 2008 05:00:24 +0000</pubDate>
			<guid>http://punbb.ru/post18819.html#p18819</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post18331.html#p18331</link>
			<description><![CDATA[<div class="quotebox"><cite>nobody пишет:</cite><blockquote><p>Интересный мануал, ну сказанул</p></blockquote></div><p>Ну например у меня был какой-то справочник по TCP/IP от издательства &quot;Питер&quot;, мне его было интересно читать, пока у меня его одна знакомая не взяла... С тех пор я его больше не видел, так же как и ещё 2 книги по комповой безопастности, которые я даже не начал читать... И каждая из этих книг стоила в районе 500 рублей =\<br />Вообще некоторые вещи вроде мануалов мне было интересно читать, когда автор живо пишет что-то а не просто нудно излагает информацию... =(<br /></p><div class="quotebox"><cite>nobody пишет:</cite><blockquote><p>phpbb?</p></blockquote></div><p>он мне показался слишком навароченным, и вообще не понравился... :) Ктомуже он очень популярный, а мне хочется чего-нить малоиспользуемого... Вообще я как-то предпочитаю пользоваться малопопулярными вещами...<br />А так глядиш с punbb ещё и php выучу... Вот CSS уже собираюсь вспоминать, т.к. хочу тему для форума сделать по своему вкусу... ^_^<br />Ещё никак руки не дойдут сайт начать делать, хочу исключительно HTML+CSS юзать, постараюсь даже без жабаскрипта обойтись...</p><p>В общем в результате я наверное форум снесу и постараюсь вашу сборку поставить, а потом впихнуть в неё базу данных из бэкапа...</p>]]></description>
			<author><![CDATA[dummy@example.com (NamlessTee)]]></author>
			<pubDate>Thu, 08 May 2008 21:46:01 +0000</pubDate>
			<guid>http://punbb.ru/post18331.html#p18331</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post18315.html#p18315</link>
			<description><![CDATA[<div class="quotebox"><cite>NamlessTee пишет:</cite><blockquote><p>форум, только для тех кто нифига не понимает в пхп да и вообще с языками программирования и скриптовыми языками слабо занком...</p></blockquote></div><p>phpbb?<br /></p><div class="quotebox"><cite>NamlessTee пишет:</cite><blockquote><p>Или, посоветуйте мне какой-нить гайд/мануал по пхп... Желательно, только, чтоб интересно было написанно..</p></blockquote></div><p>Интересный мануал, ну сказанул <img src="http://punbb.ru/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" /></p>]]></description>
			<author><![CDATA[dummy@example.com (nobody)]]></author>
			<pubDate>Thu, 08 May 2008 14:30:58 +0000</pubDate>
			<guid>http://punbb.ru/post18315.html#p18315</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post18310.html#p18310</link>
			<description><![CDATA[<p>Не уверен что там с MySQL, у меня к нему доступа никакого нет, но попрошу чела, у которого хостится мой форум, чтоб перепроверил... С самим форумом я все необходимые операции произвёл, судя по всему...</p><div class="quotebox"><blockquote><p>punbb - движок для тех, кто хотябы немного понимает в программировании, отмазки типа &quot;в php я абсолютный ноль&quot; не канают!</p></blockquote></div><p>Посоветуйте мне тогда такой же(ну можно не совсем такой же, чтоб там был примерно такой же набор функций как у вашей сборки punbb, только чтоб дополнительно ничего небыло, я нахожу, что в большинстве остальных форумов слишком много лишних вещей, да и сами по себе они более громосткие) форум, только для тех кто нифига не понимает в пхп да и вообще с языками программирования и скриптовыми языками слабо занком...<br />Если б я знал альтэрнативу какую-нибудь...</p><p>Или, посоветуйте мне какой-нить гайд/мануал по пхп... Желательно, только, чтоб интересно было написанно.. <img src="http://punbb.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /><br />/me вспомнил, что он ещё месяца 3 назад собирался садиться за изучение C#, дабы написать кой-каких скриптов для рануо, даже уже книжек накачал, но пока никак руки не доходят... =\</p>]]></description>
			<author><![CDATA[dummy@example.com (NamlessTee)]]></author>
			<pubDate>Thu, 08 May 2008 14:06:22 +0000</pubDate>
			<guid>http://punbb.ru/post18310.html#p18310</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post18297.html#p18297</link>
			<description><![CDATA[<p>punbb - движок для тех, кто хотябы немного понимает в программировании, отмазки типа &quot;в php я абсолютный ноль&quot; не канают!<br />А главное — учитесь читать внимательно!!! Читайте первый пост:<br /></p><div class="quotebox"><blockquote><p>ошибка &quot;Unable to insert search index words&quot;</p><p>Ошибка происходит из-за попытки записать в таблицу неуникальное слово. Дело в том, что при записи в базу стрОки обрезаются до длины поля, поэтому длинные слова, различающиеся последними символами станут одинаковыми. Поле search_words.word изначально расчитано на слова длиной до 20 (однобайтовых) символов. Кирилические символы в UTF-8 занимают два байта. Другие алфавиты могут потребовать три байта на символ. </p><p>Необходимо убедиться, что <br />- поле search_words.word имеет collation BINARY либо само поле типа VARBINARY (зависит от версии MySQL)<br />- <strong>длина поля не менее 40</strong> (20 символов * 2 байта или 13 символов * 3 байта) <br />т.е. нормальный вид поля word VARBINARY(40)</p></blockquote></div><p>У вас, судя по всему, поле осталось 20-байтным. Если split_words выдает слова до 40 байт блинной, то и поле должно быть таким!!! Или поправьте функцию чтобы оставляла 20 байт (до 20 латинских букв == до 10 русских == до 6 китайских) </p><p><a href="http://punbb.ru/redirect-07dc05b0cd5b9ff57420a6f05210e0c21f0bb392-18297.html" target="_blank">В UTF-8 длина одного символа от 1 до 4 байт</a>, имейте это в виду.</p>]]></description>
			<author><![CDATA[dummy@example.com (artoodetoo)]]></author>
			<pubDate>Thu, 08 May 2008 03:40:30 +0000</pubDate>
			<guid>http://punbb.ru/post18297.html#p18297</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post18282.html#p18282</link>
			<description><![CDATA[<p>Спасибо ^_^ search_idx.php поправил.<br />Остальное всё вроде правильно...<br />Проблема с &quot;Unable to insert search index words&quot;, при попытке редактирования постов осталась... =(<br />Вот, что пишет форум:<br /></p><div class="codebox"><pre><code>An error was encountered
File: ***/include/search_idx.php
Line: 149

PunBB reported: Unable to insert search index words 

Database reported: Duplicate entry &#039;browserparasitescann&#039; for key 1 (Errno: 1062)</code></pre></div><p>Сто сорок девятая строка в файле &quot;search_idx.php&quot;:<br /></p><div class="codebox"><pre><code>                    $db-&gt;query(&#039;INSERT INTO &#039;.$db-&gt;prefix.&#039;search_words (word) VALUES&#039;.implode(&#039;,&#039;, preg_replace(&#039;#^(.*)$#&#039;, &#039;(\&#039;\1\&#039;)&#039;, $new_words))) or error(&#039;Unable to insert search index words&#039;, __FILE__, __LINE__, $db-&gt;error());</code></pre></div><p>Извиняюсь за глупые вопросы, я в php абсолютный ноль, да и вообще ни каких языков программирования или скриптовых не знаю(если не считать давно забытый JavaScript)... =\</p>]]></description>
			<author><![CDATA[dummy@example.com (NamlessTee)]]></author>
			<pubDate>Wed, 07 May 2008 06:28:37 +0000</pubDate>
			<guid>http://punbb.ru/post18282.html#p18282</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post18281.html#p18281</link>
			<description><![CDATA[<p>- достаточно только в конструкторе function DBLayer. хотя если поставите в нескольких местах ошибки не будет <img src="http://punbb.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>- помоему п. 3b все написано однозначно: &quot;во всех *.php &quot; и &quot;особый случай&quot;. </p><p>- split_words: вам надо понять как работает функция pun_strlen. в отличие от strlen она возвращает не длину в байтах, а длину в &quot;экранных символах&quot;, в т.ч. в символах вида &amp;#nnnn;<br />split_words выбрасывает те слова, которые не влезут в поле search_words.word ...</p>]]></description>
			<author><![CDATA[dummy@example.com (artoodetoo)]]></author>
			<pubDate>Wed, 07 May 2008 02:21:14 +0000</pubDate>
			<guid>http://punbb.ru/post18281.html#p18281</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post18256.html#p18256</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>2. в файле include/dblayer/mysql.php сразу за if ($this-&gt;link_id) надо указать что мы работаем с данными в уникоде:</p></blockquote></div><p>В этом файле &quot;if ($this-&gt;link_id)&quot; встречается 2 раза(в &quot;function DBLayer&quot; и в function close), в обоих случаях надо указывать?</p><p>Пункт 3b относится только к &quot;include/&quot; или ко всему форуму вообще?</p><p>И ещё вот вопрос, я несовсем понял что надо делать, у меня возникает ошибка &quot;Unable to insert search index words&quot;, при попытке редактирования постов, хотя всё делал по этой инструкции, но мог где-то ошибиться или что-то пропустить, не знаете, что я мог сделать неправильно?<br />P.S. В файле include/search_idx.php кусок функции split_words, который у вас выглядит вот так:<br /></p><div class="codebox"><pre><code>            $num_chars = strlen($word);

            if ($num_chars &lt; 3 || $num_chars &gt; 40 || in_array($word, $stopwords))
                unset($words[$i]);</code></pre></div><p>у меня выглядит вот так:<br /></p><div class="codebox"><pre><code>            $num_chars = pun_strlen($word);

            if ($num_chars &lt; 3 || $num_chars &gt; 40 || in_array($word, $stopwords))
                unset($words[$i]);</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (NamlessTee)]]></author>
			<pubDate>Tue, 06 May 2008 13:32:45 +0000</pubDate>
			<guid>http://punbb.ru/post18256.html#p18256</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post17798.html#p17798</link>
			<description><![CDATA[<p><strong>Раскоментировал строки с SET NAMES и все русские сообщения испортились</strong><br />Так и должно было получиться, потому что русский текст УЖЕ сохранился в базе неправильно. Придется набивать текст заново, зато дальше все будет работать как положено.</p>]]></description>
			<author><![CDATA[dummy@example.com (artoodetoo)]]></author>
			<pubDate>Sun, 13 Apr 2008 17:20:00 +0000</pubDate>
			<guid>http://punbb.ru/post17798.html#p17798</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post16694.html#p16694</link>
			<description><![CDATA[<p>Чистый PunBB 1.2.17 + UTF-8:</p><p><a href="http://punbb.ru/redirect-3e2a500102870125751b0ba3cb67333190f3747e-16694.html" target="_blank">punbb-1.2.17+utf-8+1.0.zip</a></p>]]></description>
			<author><![CDATA[dummy@example.com (International)]]></author>
			<pubDate>Mon, 25 Feb 2008 17:33:04 +0000</pubDate>
			<guid>http://punbb.ru/post16694.html#p16694</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post15686.html#p15686</link>
			<description><![CDATA[<p>Все языки в utf-8:</p><p><a href="http://punbb.ru/redirect-d6842a7b35c918dbbd0fd327d8378043790f2b54-15686.html" target="_blank">http://punbb.ru/redirect-d6842a7b35c918dbbd0fd327d8378043790f2b54-15686.html</a></p>]]></description>
			<author><![CDATA[dummy@example.com (International)]]></author>
			<pubDate>Sat, 19 Jan 2008 06:56:36 +0000</pubDate>
			<guid>http://punbb.ru/post15686.html#p15686</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post14680.html#p14680</link>
			<description><![CDATA[<p>дополнение: скрипт установки install.php сам определяет доступный интерфейс БД: mysql или mysqli. пропустить этот момент очень легко, но разница есть! если у вас mysqli, то в файл конфигурации config.php пропишется<br /></p><div class="codebox"><pre><code>$db_type = &#039;mysqli&#039;;</code></pre></div><p>форум будет использовать файл mysqli.php , а не mysql.php. а значит чтобы вы там не писа́ли в mysql.php, не будет никакого эффекта. вот как выглядит правильный фрагмент в [size=16]mysqli.php[/size]<br /></p><div class="codebox"><pre><code>    function DBLayer($db_host, $db_username, $db_password, $db_name, $db_prefix, $foo)
    {
        $this-&gt;prefix = $db_prefix;

        // Was a custom port supplied with $db_host?
        if (strpos($db_host, &#039;:&#039;) !== false)
            list($db_host, $db_port) = explode(&#039;:&#039;, $db_host);

        if (isset($db_port))
            $this-&gt;link_id = @mysqli_connect($db_host, $db_username, $db_password, $db_name, $db_port);
        else
            $this-&gt;link_id = @mysqli_connect($db_host, $db_username, $db_password, $db_name);

        if (!$this-&gt;link_id)
            error(&#039;Unable to connect to MySQL and select database. MySQL reported: &#039;.mysqli_connect_error(), __FILE__, __LINE__);

        @mysqli_query($this-&gt;link_id, &quot;SET NAMES &#039;utf8&#039;&quot;);
    }</code></pre></div>]]></description>
			<author><![CDATA[dummy@example.com (artoodetoo)]]></author>
			<pubDate>Thu, 22 Nov 2007 09:22:13 +0000</pubDate>
			<guid>http://punbb.ru/post14680.html#p14680</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post14491.html#p14491</link>
			<description><![CDATA[<p>Еще раз, углубленно и с особым цинизмом: </p><p>Плевать в какой кодировке работаем, надо чтобы все обслуживающие программы знали с какой кодировкой работают в данный момент. </p><p>Цепочка программ такая: браузер - вебсервер - php_с_клиентом_msql - сервер_mysql</p><p>Есть кодировка страниц, а есть кодировка данных в таблицах БД. <strong>Они могут совпадать, а могут и не совпадать!</strong> Между ними есть невидимая &quot;труба&quot; — клиент mysql. Он ВСЕГДА пытается перекодировать данные с кодировки базы в кодировку страниц и обратно. </p><p>Клиент mysql точно знает какая кодировка в таблице - там она указана. Про кодировку страниц клиент строит предположения. Чтобы подсказать ему правильное решение мы можем дать команду SET NAMES.</p><p>ИТОГО: для правильной работы с русским текстом надо обеспечить следующие условия:<br />1. Таблицы должны иметь русский (cp1251, koi8r) или уникодный (utf8) чарсет. Лучше всего настроить такой чарсет по-умолчанию для своей базы ПЕРЕД установкой форума. Или в install.php указывать [search]default charset[/search] для всех CREATE TABLE. Коллейшн (порядок сортировки) зависит от чарсета. Если вы указали правильный чарсет, коллейшн сам подставится правильный.<br />2. В php скриптах сразу после соединения с базой надо явно указывать кодировку html. То есть прописать [search]SET NAMES[/search].</p><p>Если эти два условия соблюдены, ваши данные будут белыми и пушистыми. Иначе может вылезти лажа, причем может вылезти не сразу, а когда вам будет чего терять. <strong>Заметьте: здесь я говорю не только про utf и не только про PunBB</strong>, эти правила универсальные, относятся к любым кодировкам и скриптам. <br /><strong>ВСЕГДА ПРОПИСЫВАЙТЕ КОДИРОВКИ ЯВНО! НЕ ПОЛАГАЙТЕСЬ НА УДАЧУ!</strong></p><div class="quotebox"><blockquote><p>Проверено: данные в базе могут быть в любой из русских кодировок или utf8, кодировка страниц может быть в любой (другой) из русских кодировок или utf8 и все будет работать ништяк, пока мы соблюдаем пп.1 и 2. ... с русским и английским текстом будет работать. <br />НО! Если вы хотите, хотябы изредка, вставлять в сообщения символы из иных кодировок: французский, литовский, китайский и т.д., спецсимволы какие-нибудь научные — используйте UTF-8 на обоих концах. С AJAX проще работать при UTF-8. Человекопонятные УРЛы с русским текстом — UTF-8...</p></blockquote></div><p>Update: <br />Бывает такое: что бы мы не прописали в &lt;meta ... Content-Type ... chasert ... /&gt; браузер самонастраивается на одну кодировку, например на windows-1251. Это значит, что Apache подставляет в заголовок http свое сообщение про кодировку. А зря... Грешат этим русские провайдеры. <br />Исправить можно опять-таки указывая ЯВНО свою кодировку в файле .htaccess командой [search]AddDefaultCharset[/search]. Тогда Apache будет подставлять в заголовок то, что нам надо.</p>]]></description>
			<author><![CDATA[dummy@example.com (artoodetoo)]]></author>
			<pubDate>Wed, 14 Nov 2007 01:55:43 +0000</pubDate>
			<guid>http://punbb.ru/post14491.html#p14491</guid>
		</item>
		<item>
			<title><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link>http://punbb.ru/post12411.html#p12411</link>
			<description><![CDATA[<p>Однажды очень много времени потратил на изучение проблем UTF-8 в PHP, так как хотел реализовать нормальный регистронезависимый поиск в <a href="http://punbb.ru/redirect-6b6d57da816856ca330df14d7d7a8236cb34b0bf-12411.html" target="_blank">TxP</a>. Рекомендую обратить внимание на то, что <a href="http://punbb.ru/redirect-40e024c505b652960a94722815afbd036c13d121-12411.html" target="_blank">пишет про UTF-8 и PHP Юлик</a>. Оттуда я почерпнул больше всего информации в понятной для меня (не специалиста) форме.</p>]]></description>
			<author><![CDATA[dummy@example.com (BrokenBrake)]]></author>
			<pubDate>Tue, 21 Aug 2007 23:00:38 +0000</pubDate>
			<guid>http://punbb.ru/post12411.html#p12411</guid>
		</item>
	</channel>
</rss>
