форум vBSupport.ru > vBSupport.ru > Localizations
  • »
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
 
 
 
 
GRAD
Простоузер
Default Windows-1251 to UTF-8
0

Кто-нить знает как можно налету перед выводом конвертировать из Windows-1251 в UTF-8?
проблема в чем..
на большинстве мабилок русский нормально отображается только в UTF-8, шаблон Mobile Alabama, по умолчанию весь форум выводится в Windows-1251.
Может есть переменная которая хранит весь выводимый текст и которую можно предварительно от-iconv-ить? никто подобным не занимался?
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
shpunsetoy
Эксперт
 
shpunsetoy's Avatar
Default
0

Quote:
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
Простоузер
Default
0

shpunsetoy вы меня не так поняли. я спрашивал не как перевести строку из CP1251 в UTF, а как это сделать перед выводом информации форума на лету так сказать.
 
 
Мик
Эксперт
 
Мик's Avatar
Default
0

Quote:
Originally Posted by GRAD View Post
на большинстве мабилок русский нормально отображается только в UTF-8, шаблон Mobile Alabama, по умолчанию весь форум выводится в Windows-1251.
на всех мобилах, которые юзают форум с этим стилем, проблем с кодировкой НЕТ!!!!!
капай глубже!!!
 
 
netwind
Гуру
 
netwind's Avatar
Default
3

ты в курсе что есть такая американская фирма motorola ? так она настолько срать хотела на европы, что cp1251 ее браузеры не умеют.
 
 
GRAD
Простоузер
Default
0

нашел таки искомую функцию print_output в functions.php
Перекодировку сделал так.
PHP Code:
    if ($_SERVER["HTTP_HOST"] == 'pda-forum.site.ru'){
            @
header('Content-Type: text/html; charset=utf-8');
            
$output iconv('windows-1251','utf-8',$output); 
        } 
Теперь проблема как входные данные конвертировать обратно в windows-1251.
Пошел исктать функцию, обратную print_output.
Может кто знает такую? Интуиция подсказывает что придется ковырять аж саму $db
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

тогда уж переведи весь форум на утф. уж браузеры то практически все нормально его отображают
 
 
GRAD
Простоузер
Default
0

Весь.. хм.. тоже идея! Думаю самое правильное решение. только это заморочено.
А пока решение придумал такое
в файле class_core.php
в функцию выполнения запросов
добавил код конвертации
PHP Code:
    function &execute_query($buffered true, &$link)
    {

        if (
$_SERVER["HTTP_HOST"] == 'pda-forum.site.ru'){
            
            
$this->sql iconv('utf-8','windows-1251',$this->sql); 
        }
        
$this->connection_recent =& $link;
.... 
 
 
netwind
Гуру
 
netwind's Avatar
Default
0

вот тебе кусочек кода для работы с 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
Простоузер
Default
0

Самое лучшее решение - переконвертить вообще все в UTF-8: БД, скрипты, сделать рефакторинг кода, заменив некоторый строковые функции и т.д. Это конечно не просто и займет некоторое время, но зато потом не будет никаких "головняков" с кодировками. Конвертить вывод - костыль, который повышает нагрузку на сервер. Сам перекодировал по этой инструкции: конвертер сайта в UTF8: помимо общих сведений в этой статье есть скрипты для конвертации.
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 02:19 AM.


Powered by vBulletin® Version 4.x.fuck
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Loading...