<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[PunBB по-русски - Заготовка FAQ по UTF-8]]></title>
	<link rel="self" href="http://punbb.ru/feed-atom-topic1222.xml" />
	<updated>2008-07-20T15:51:06Z</updated>
	<generator>PunBB</generator>
	<id>http://punbb.ru/topic1222-zagotovka-faq-po-utf8.html</id>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post19250.html#p19250" />
			<content type="html"><![CDATA[<p>Хочу ещё немного от себя добавить. Некоторые браузеры, в частности Опера (и возможно, Firefox) считают BOM в файле <span class="bbu">важней</span> кодировки в [mono]&lt;meta&gt;[/mono]. Может возникнуть ситуация, когда файлы по факту сохранены в 1251, в базу/из базы данные передаются верно, даже AddDefaultCharset в .htaccess есть, а русский в браузере всё равно нечитабелен.</p><p>Проблема в редакторах, некорректно работающих с UTF-8, вроде встроенного в WinSCP. С его медвежьей услугой файл в 1251 может иметь BOM (!) - столкнулся однажды на практике. Пользуйтесь правильными редакторами.</p>]]></content>
			<author>
				<name><![CDATA[Freeman]]></name>
				<uri>http://punbb.ru/user1558.html</uri>
			</author>
			<updated>2008-07-20T15:51:06Z</updated>
			<id>http://punbb.ru/post19250.html#p19250</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post18819.html#p18819" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[artoodetoo]]></name>
				<uri>http://punbb.ru/user697.html</uri>
			</author>
			<updated>2008-06-04T05:00:24Z</updated>
			<id>http://punbb.ru/post18819.html#p18819</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post18331.html#p18331" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[NamlessTee]]></name>
				<uri>http://punbb.ru/user1773.html</uri>
			</author>
			<updated>2008-05-08T21:46:01Z</updated>
			<id>http://punbb.ru/post18331.html#p18331</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post18315.html#p18315" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[nobody]]></name>
				<uri>http://punbb.ru/user490.html</uri>
			</author>
			<updated>2008-05-08T14:30:58Z</updated>
			<id>http://punbb.ru/post18315.html#p18315</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post18310.html#p18310" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[NamlessTee]]></name>
				<uri>http://punbb.ru/user1773.html</uri>
			</author>
			<updated>2008-05-08T14:06:22Z</updated>
			<id>http://punbb.ru/post18310.html#p18310</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post18297.html#p18297" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[artoodetoo]]></name>
				<uri>http://punbb.ru/user697.html</uri>
			</author>
			<updated>2008-05-08T03:40:30Z</updated>
			<id>http://punbb.ru/post18297.html#p18297</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post18282.html#p18282" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[NamlessTee]]></name>
				<uri>http://punbb.ru/user1773.html</uri>
			</author>
			<updated>2008-05-07T06:28:37Z</updated>
			<id>http://punbb.ru/post18282.html#p18282</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post18281.html#p18281" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[artoodetoo]]></name>
				<uri>http://punbb.ru/user697.html</uri>
			</author>
			<updated>2008-05-07T02:21:14Z</updated>
			<id>http://punbb.ru/post18281.html#p18281</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post18256.html#p18256" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[NamlessTee]]></name>
				<uri>http://punbb.ru/user1773.html</uri>
			</author>
			<updated>2008-05-06T13:32:45Z</updated>
			<id>http://punbb.ru/post18256.html#p18256</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post17798.html#p17798" />
			<content type="html"><![CDATA[<p><strong>Раскоментировал строки с SET NAMES и все русские сообщения испортились</strong><br />Так и должно было получиться, потому что русский текст УЖЕ сохранился в базе неправильно. Придется набивать текст заново, зато дальше все будет работать как положено.</p>]]></content>
			<author>
				<name><![CDATA[artoodetoo]]></name>
				<uri>http://punbb.ru/user697.html</uri>
			</author>
			<updated>2008-04-13T17:20:00Z</updated>
			<id>http://punbb.ru/post17798.html#p17798</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post16694.html#p16694" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[International]]></name>
				<uri>http://punbb.ru/user1591.html</uri>
			</author>
			<updated>2008-02-25T17:33:04Z</updated>
			<id>http://punbb.ru/post16694.html#p16694</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post15686.html#p15686" />
			<content type="html"><![CDATA[<p>Все языки в utf-8:</p><p><a href="http://punbb.ru/redirect-d6842a7b35c918dbbd0fd327d8378043790f2b54-15686.html" target="_blank">intdn.com/idn/viewtopic.php?id=2881</a></p>]]></content>
			<author>
				<name><![CDATA[International]]></name>
				<uri>http://punbb.ru/user1591.html</uri>
			</author>
			<updated>2008-01-19T06:56:36Z</updated>
			<id>http://punbb.ru/post15686.html#p15686</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post14680.html#p14680" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[artoodetoo]]></name>
				<uri>http://punbb.ru/user697.html</uri>
			</author>
			<updated>2007-11-22T09:22:13Z</updated>
			<id>http://punbb.ru/post14680.html#p14680</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post14491.html#p14491" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[artoodetoo]]></name>
				<uri>http://punbb.ru/user697.html</uri>
			</author>
			<updated>2007-11-14T01:55:43Z</updated>
			<id>http://punbb.ru/post14491.html#p14491</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Заготовка FAQ по UTF-8]]></title>
			<link rel="alternate" href="http://punbb.ru/post12411.html#p12411" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[BrokenBrake]]></name>
				<uri>http://punbb.ru/user1304.html</uri>
			</author>
			<updated>2007-08-21T23:00:38Z</updated>
			<id>http://punbb.ru/post12411.html#p12411</id>
		</entry>
</feed>

