VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Кто-нить знает как можно налету перед выводом конвертировать из Windows-1251 в UTF-8?
проблема в чем..
на большинстве мабилок русский нормально отображается только в UTF-8, шаблон Mobile Alabama, по умолчанию весь форум выводится в Windows-1251.
Может есть переменная которая хранит весь выводимый текст и которую можно предварительно от-iconv-ить? никто подобным не занимался?
function CP1251toUTF8($string){
$out = '';
for ($i = 0; $i<strlen($string); ++$i){
$ch = ord($string{$i});
if ($ch < 0x80) $out .= chr($ch);
else
if ($ch >= 0xC0)
if ($ch < 0xF0)
$out .= "\xD0".chr(0x90 + $ch - 0xC0); // А-Я, а-п (A-YA, a-p)
else $out .= "\xD1".chr(0x80 + $ch - 0xF0); // р-я (r-ya)
else
switch($ch){
case 0xA8: $out .= "\xD0\x81"; break; // YO
case 0xB8: $out .= "\xD1\x91"; break; // yo
// ukrainian
case 0xA1: $out .= "\xD0\x8E"; break; // Ў (U)
case 0xA2: $out .= "\xD1\x9E"; break; // ў (u)
case 0xAA: $out .= "\xD0\x84"; break; // Є (e)
case 0xAF: $out .= "\xD0\x87"; break; // Ї (I..)
case 0xB2: $out .= "\xD0\x86"; break; // I (I)
case 0xB3: $out .= "\xD1\x96"; break; // i (i)
case 0xBA: $out .= "\xD1\x94"; break; // є (e)
case 0xBF: $out .= "\xD1\x97"; break; // ї (i..)
// chuvashian
case 0x8C: $out .= "\xD3\x90"; break; // Ӑ (A)
case 0x8D: $out .= "\xD3\x96"; break; // Ӗ (E)
case 0x8E: $out .= "\xD2\xAA"; break; // Ҫ (SCH)
case 0x8F: $out .= "\xD3\xB2"; break; // Ӳ (U)
case 0x9C: $out .= "\xD3\x91"; break; // ӑ (a)
case 0x9D: $out .= "\xD3\x97"; break; // ӗ (e)
case 0x9E: $out .= "\xD2\xAB"; break; // ҫ (sch)
case 0x9F: $out .= "\xD3\xB3"; break; // ӳ (u)
}
}
return $out;
}
@GRAD
Простоузер
Join Date: Dec 2006
Posts: 17
Reputation:
Novice 0
Репутация в разделе: 0
0
shpunsetoy вы меня не так поняли. я спрашивал не как перевести строку из CP1251 в UTF, а как это сделать перед выводом информации форума на лету так сказать.
@Мик
Эксперт
Join Date: Mar 2006
Location: Улыбаемся и машем, машем и улыбаемся... :)ь
Награды в конкурсах:
Posts: 2,951
Версия vB: 1.x.x
Reputation:
Professional 854
Репутация в разделе: 114
0
Quote:
Originally Posted by GRAD
на большинстве мабилок русский нормально отображается только в UTF-8, шаблон Mobile Alabama, по умолчанию весь форум выводится в Windows-1251.
на всех мобилах, которые юзают форум с этим стилем, проблем с кодировкой НЕТ!!!!!
капай глубже!!!
@netwind
Гуру
Join Date: Aug 2005
Location: Рiдна Олбанея
Posts: 3,844
Версия vB: 3.8.x
Reputation:
Гуру 1227
Репутация в разделе: 139
3
ты в курсе что есть такая американская фирма motorola ? так она настолько срать хотела на европы, что cp1251 ее браузеры не умеют.
@GRAD
Простоузер
Join Date: Dec 2006
Posts: 17
Reputation:
Novice 0
Репутация в разделе: 0
0
нашел таки искомую функцию print_output в functions.php
Перекодировку сделал так.
Теперь проблема как входные данные конвертировать обратно в windows-1251.
Пошел исктать функцию, обратную print_output.
Может кто знает такую? Интуиция подсказывает что придется ковырять аж саму $db
@netwind
Гуру
Join Date: Aug 2005
Location: Рiдна Олбанея
Posts: 3,844
Версия vB: 3.8.x
Reputation:
Гуру 1227
Репутация в разделе: 139
0
тогда уж переведи весь форум на утф. уж браузеры то практически все нормально его отображают
@GRAD
Простоузер
Join Date: Dec 2006
Posts: 17
Reputation:
Novice 0
Репутация в разделе: 0
0
Весь.. хм.. тоже идея! Думаю самое правильное решение. только это заморочено.
А пока решение придумал такое
в файле class_core.php
в функцию выполнения запросов
добавил код конвертации
PHP Code:
function &execute_query($buffered = true, &$link)
{
if ($_SERVER["HTTP_HOST"] == 'pda-forum.site.ru'){
вот тебе кусочек кода для работы с gallery2 (она тоже в utf)
PHP Code:
function recode_input_array(&$a){ foreach ($a as $key => $value) { if (is_array($value)){ recode_input_array($a[$key]); } if (is_string($value)){ @$a[$key]=iconv('utf-8','windows-1251//IGNORE',$value); } } } recode_input_array($_REQUEST); recode_input_array($_POST); recode_input_array($_GET);
Поставь его куда-нибудь в начало global.php
может быть даже что-то получится.
мне кажется возможны проблемы с аяксом
@kapust
Простоузер
Join Date: Mar 2013
Posts: 2
Версия vB: 4.2.х
Reputation:
Novice 0
Репутация в разделе: 0
0
Самое лучшее решение - переконвертить вообще все в UTF-8: БД, скрипты, сделать рефакторинг кода, заменив некоторый строковые функции и т.д. Это конечно не просто и займет некоторое время, но зато потом не будет никаких "головняков" с кодировками. Конвертить вывод - костыль, который повышает нагрузку на сервер. Сам перекодировал по этой инструкции: конвертер сайта в UTF8: помимо общих сведений в этой статье есть скрипты для конвертации.