# Возможно ли

## GreenDragon

попросить админа web-сервера положить в папочку русскоязычного форума файлик ".htaccess" следующего содержания:

```
AddDefaultCharset KOI8-R
```

 и сказать 

```
# /etc/init.d/apache2 reload
```

 Ибо выставлять постоянно в каждом окне кодировку утомляет.

----------

## viy

Судя по URL'ам, это невозможно. Думаю, что форумы храняться целиком в базе в виде поля с признаком "форум".

Как ни странно, Mozilla показывает все хорошо. Autodetect выключен, версия 1.7.2.

----------

## chernousov

 *GreenDragon wrote:*   

> положить в папочку русскоязычного форума файлик ".htaccess"

 

Простите, а где вы увидели эту самую "папочку русскоязычного форума"? Назовите админу эту "папочку" и он положит, я уверен.

 *viy wrote:*   

> форумы храняться целиком в базе в виде поля с признаком "форум"

 

Ой.. это уже "непередаваемые ощчущчения..."...

----------

## viy

А что вызвало "непередаваемые ощчущчения..."?

----------

## chernousov

 *viy wrote:*   

> А что вызвало "непередаваемые ощчущчения..."?

 

То что в квоте  :Wink: 

Точнее - не совсем я понял, причём тут база вообще. Даже если предположить, что база и "при чём", то что за "поля с признаком "форум""?

----------

## GreenDragon

 *chernousov wrote:*   

>  *GreenDragon wrote:*   положить в папочку русскоязычного форума файлик ".htaccess" 
> 
> Простите, а где вы увидели эту самую "папочку русскоязычного форума"? Назовите админу эту "папочку" и он положит, я уверен.
> 
> 

 

Ну не знаю как они там хранятся, но то что страница одается через, извините" жопу, так это уж точно. Некоторое время назад все было нормально (с пол-года примерно). А выключать автодетект, ну извините, мне за день приходится бывать на полтора десятках сайтов в различных кодировках и каждый раз выбирать кодовою страницу не то что напрягает, а вызывает неприятные ощущения. 

Что там у Мозилы - не знаю, она меня не интересует, но, к примеру, тот же IE ее так же неправильно отображает. Если уже что-то желать, так не через одно известное место, а вообще это похоже на рассовую дискриминацию  :Smile: ))

----------

## chernousov

К сожалению phpbb не поддерживает различные кодировки для различных форумов в пределах одного борда. Однако, я в своё время изхитрялся добавлять поле в табличку с форумами, куда клал нужную кодировку, а потом перед отдаванием визитору контента проверял, к какому форуму этот контент относится и выплёвывал браузеру соответствующие хедеры. Но возьмутся ли уважаемые нами веб-мастеры нашего любимого forums.gentoo.org за такую переделку?..

----------

## @lexb

может стоит в личных настройках выбрать язык форума?

----------

## nbkolchin

 *@lexb wrote:*   

> может стоит в личных настройках выбрать язык форума?

 

Нет. нефига не помогло.

А что мешает выставить у всех форумов UTF-8 кодировку?

Nickolay

----------

## chernousov

 *nbkolchin wrote:*   

>  *@lexb wrote:*   может стоит в личных настройках выбрать язык форума? 
> 
> Нет. нефига не помогло.

 И не поможет. Это всего лишь язык интерфейса, то есть язык сообщений, которыми форум с вами "общается".

А на счёт UTF, то это целая эпопея. Первое требование, чтобы UTF корректно поддерживала используемая база данных, иначе станет невозможным индексация и поиск. Ну и конечно, до кучи это должен корректно прожёвывать PHP, ибо не всякий PHP по дефолту знает, что такое mbstring, iconv etc....

----------

## nbkolchin

 *chernousov wrote:*   

> А на счёт UTF, то это целая эпопея. Первое требование, чтобы UTF корректно поддерживала используемая база данных, иначе станет невозможным индексация и поиск. Ну и конечно, до кучи это должен корректно прожёвывать PHP, ибо не всякий PHP по дефолту знает, что такое mbstring, iconv etc....

 

База данных: postgresql или нестабильный mysql.

А с PHP действительно жопа.  :Sad: 

Нереально все это. Интересно, а как проблему решают греки? Может скооперироваться с ними и китайцами, да надавить на админов?

Nickolay

----------

## viy

phpBB хранит все данные в базе. Признак "форум" --- поле с данной смысловой нагрузгкой в таблице с сообщениями, участвующее в формировании where-условия при выборке списка сообщений.

В этом вся проблема и есть. Мне кажется, что phpBB не позволяет настраивать что-либо для отдельных форумов (не знаю). Как писал г. Лебедев, все можно решить, добавив кодировку в тэг <meta http-equiv name="Content-type"... />. Сейчас (в исходниках страниц) указан только общий тип, без кодировки. На всех форумах (смотрел греков, а китайцев не нашел) то же.

По моему мнению, про проблему надо разработчикам phpBB писать. А админы forums.gentoo.org могут только грубо спичек в исходники натыкать, типа для форума 43, ставить кодировку koi8-r.

IMHO

----------

## chernousov

 *viy wrote:*   

> phpBB хранит все данные в базе. Признак "форум" --- поле с данной смысловой нагрузгкой в таблице с сообщениями, участвующее в формировании where-условия при выборке списка сообщений.

 

Звучит устрашающе.. "Непередаваемые ощчущчения", часть вторая   :Twisted Evil: 

Ты наверное хотел сказать "в таблице сообщений есть колонка, где хранится идентификатор форума, которому принадлежит сообщение"? Мы правильно тебя поняли?  :Wink: 

----------

## nbkolchin

Мне интересно: а Админы этот форум вообще читают?

Nickolay

----------

## nbkolchin

Вдогонку:

1) phpbb устанавливает кодировку в файле overall_header.tpl. По умолчанию там стоит глобальная кодировка для всей системы S_CONTENT_ENCODING. В Gentoo content-encoding вообще выкинули.

2) Упражнение для желающих: переписать overall_header.tpl таким образом, чтобы content-encoding устанавливался в зависимости от языка выбранного пользователем.

 *Quote:*   

> 
> 
> To enable compliance with HTML and XHTML specifications as well as enabling browsers to automatically support a users selected language we enable a charset tag to be output to the browser. This identifies the primary character set the user has selected, eg. iso-8859-1 for Western European languages (English, German, French, etc.), windows-1251 for Cyrillic alphabets (Russian, Bulgarian, etc.) and so on. The downside to doing this is that most modern browsers (such as Internet Explorer) convert any character not present in that character set into what are termed Numerical Character References or NCR's. These take the form of &#nnnn; where nnnn is the hexadecimal number of that characters UNICODE reference.
> 
> Unfortunately PHP (which effectively supports only iso-8859-1 at this time) does not appear to attempt to process this data back into normal characters. Therefore phpBB treats them as text the user has entered and wishes to see. phpBB enables this by turning the & into &amp;. This results in the characters appearing as they do. Although we could ignore &#nnnn; (there are pro's and of course con's to doing so) at present we don't.
> ...

 

```

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html dir="{S_CONTENT_DIRECTION}">

<head>

<meta http-equiv="Content-Type" content="text/html; charset={S_CONTENT_ENCODING}">

<meta http-equiv="Content-Style-Type" content="text/css"></head><body bgcolor="{T_BODY_BGCOLOR}" text="{T_BODY_TEXT}" link="{T_BODY_LINK}" vlink="{T_BODY_VLINK}" />

{META}

{NAV_LINKS}

<title>{SITENAME} :: {PAGE_TITLE}</title>

<!-- link rel="stylesheet" href="templates/subSilver/{T_HEAD_STYLESHEET}" type="text/css" -->

```

Nickolay

----------

## chernousov

 *nbkolchin wrote:*   

> 2) Упражнение для желающих: переписать overall_header.tpl

 

Увы, но, упражнение не приведёт к желаемому результату. Ни <html dir="..."> ни <meta http-equiv="Content-Type" content="text/html; charset=..."> не влияют на автодетект кодировки в браузере.

Но решение есть, и вот оно: header("Content-Type: text/html; charset=$our_charset");

Это можно всунуть например в common.php (если речь идёт о phpBB), ибо этот файл включается во все остальные .php форума.

P.S. Я опускаю детали, откуда выдернуть $our_charset  :Wink: . Думаю, это не требует комментариев.

----------

## viy

 *chernousov wrote:*   

> Увы, но, упражнение не приведёт к желаемому результату. Ни <html dir="..."> ни <meta http-equiv="Content-Type" content="text/html; charset=..."> не влияют на автодетект кодировки в браузере.

 

Как так?! Всю жизнь броузеры опираются на наличие либо HTTP заголовка Content-type, либо на наличие тэга <meta http-equiv="Content-type" ... Причем второе --- аналог первого.

Так что нужный результат --- будет!

----------

## nbkolchin

На самом деле, все зависит от браузера. Причем (на днях) konqueror, выдал совершенно чудовищный глюк: кодировка на странице и в форме была разной.  :Smile: 

ИМХО, единственно верный способ борьбы с кодировками это выставление всех трех полей в нужную:

- header(...)

- <?xml version="1.0" encoding="..."?>

- <meta http-equiv="Content-Type" content="text/html; charset=.../>

В любом случае, как я понял, ничего невозможного в автоматическом выставлении кодировки в зависимости от языка пользователя нет. Правильно?

Народ, кто разбирается в phpbb: напишите конкретные места куда воткнуть кодировку и будет давить админов. Напишем багрепорт с конкретным списком необходимых изменений в phpbb. 

Nickolay

----------

## GreenDragon

phpbb говорите не может, а как же здесь он может http://www.linuxshop.ru/forum/ ? Вроде там тот же phpbb, может ошибаюсь конечно

Единственное если только глобально выставлен

----------

## nbkolchin

 *GreenDragon wrote:*   

> phpbb говорите не может, а как же здесь он может http://www.linuxshop.ru/forum/ ? Вроде там тот же phpbb, может ошибаюсь конечно
> 
> Единственное если только глобально выставлен

 

В этом и проблема. Тут глобально выставить кодировку нельзя.  :Sad: 

Nickolay

----------

## chernousov

 *nbkolchin wrote:*   

> Народ, кто разбирается в phpbb: напишите конкретные места куда воткнуть кодировку и будет давить админов.

 Ну ок, вполне реально. Однако, я вижу как минимум четыре варианта реализации, у каждого есть свои минусы:

1. Encoding per-forum. Страницы, принадлежащие какому-то форуму, будут показаны в правильной кодировке. Русский - в русской кодировке, греческий - в греческой. Минус - страницы, явно не принадлежащие конкретному форуму будут показываться в дефолтной кодировке (напр., faq, profile, memberlist etc.). Плюс - относительная простота вносимых изменений. Подразумевается также, что я не буду вносить изменения в интерфейс админа, а кодировку админ ручками в базе сам пропишет (update phpbb_forums set encoding='KOI8-r' where forum_name='Russian' или forum_id=43)

2. Encoding per-user. Юзер сам себе выбирает кодировку с своём профиле (не путать с языком!!). Минус - греческий форум у русского пользователя будет отображаться тоже в KOI8  :Shocked: . Ещё один минус - придётся-таки лезть в интерфейс - надо в профиле юзера добавлять поле encoding, реализовывать select и update этого поля в базе.

3. Encoding per-forum feat. per-user. Пожалуй, идеальное, но самое сложное решение, объединяющее предыдущие два. Страницы, не принадлежащие конкретным форумам будут показываться в per-user кодировке, русский форум будет показываться в русской кодировке, а греческий форум всё-таки будет показываться в греческой кодировке.

4. Encoding=Language. Самое лёгкое, быстрое и примитивное решение - если у вас язык интерфейса - русский, значит вам насильно повсюду впендюрим KOI8-R. Никаких дополнительных полей в базе, никаких селектов и апдейтов. Греческий форум по-прежнему будет показан в KOI8-R. Ну и ещё один минус - у меня вот язык интерфейса стоит английский... и у меня нет никакого желания переключать его на русский. Значит, такие любители английского интерфейса, как я, будут по-прежнему иметь проблему кодировки с русским форумом.

Господа, жду ваших комментариев. Только, плиз, аргументированно.

----------

## nbkolchin

 *chernousov wrote:*   

> 4. Encoding=Language. Самое лёгкое, быстрое и примитивное решение - если у вас язык интерфейса - русский, значит вам насильно повсюду впендюрим KOI8-R. Никаких дополнительных полей в базе, никаких селектов и апдейтов. Греческий форум по-прежнему будет показан в KOI8-R. Ну и ещё один минус - у меня вот язык интерфейса стоит английский... и у меня нет никакого желания переключать его на русский. Значит, такие любители английского интерфейса, как я, будут по-прежнему иметь проблему кодировки с русским форумом.

 

Я за четвертое решение. Причины: Минимальный геморрой у администраторов сайта. С чем-то более сложным они пошлют сразу и навсегда. Все таки 99% посетителей сайта, проблемы русского форума не трогают.

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

Nickolay

----------

## chernousov

Забыл уточнить: 2й, 4й и частично 3й варианты будут работать только если пользователь залогинен! Все ли незалогиненые читатели форума будут иметь дефолтную кодировку.

Однако, 4й вариант реализуется следующим образом:

0. Идём в директорию, где лежит наш phpbb.

1. Открываем includes/auth.php и делаем вставляем туда одну строку в ф-цию auth() так, чтобы всё выглядело примерно так:

```
function auth($type, $forum_id, $userdata, $f_access = '')

{

    global $db, $lang;

    header("Content-Type: text/html; charset=".$lang['ENCODING']); // эту строку мы вставили

    switch( $type )
```

2. Идём в language/lang_russian/lang_main.php и убеждаемся в наличии строки

```
$lang['ENCODING'] = 'koi8-r';
```

Аналогично, повторить этот пункт для других языков.

3. Надо вернуть строку

```
<meta http-equiv="Content-Type" content="text/html; charset={S_CONTENT_ENCODING}">
```

 в соответствующее место файла templates/{ИМЯ_ТЕМПЛЕЙТА}/overall_header.tpl.

4. Всё!  :Wink: 

----------

