Как да конвертираме стрингове между UTF8 i CP1251, ако нямаме iconv
На всеки му се е налагало все някога да конвертира данни от utf8 към cp1251(windows-1251). Естествено най-лесния начин е чрез iconv. Но доста хостинг провайдери не предлагат тази функционалност. Тогава има няколко варианта:
1. Преработваме сайта, така че тоя да е изцяло на utf8, както и прилежащата база данни.
2. Намираме функции, които да заместят iconv(). По-долу има две такива
function cp1251_to_utf8($s){
$c209 = chr(209); $c208 = chr(208); $c129 = chr(129);
for($i=0; $i<strlen($s); $i++) {
$c=ord($s[$i]);
if ($c>=192 and $c<=239) $t.=$c208.chr($c-48);
elseif ($c>239) $t.=$c209.chr($c-112);
elseif ($c==184) $t.=$c209.$c209;
elseif ($c==168) $t.=$c208.$c129;
else $t.=$s[$i];
}
return $t;
}
function utf8_to_cp1251($s)
{
for ($c=0;$c<strlen($s);$c++)
{
$i=ord($s[$c]);
if ($i<=127) $out.=$s[$c];
if ($byte2){
$new_c2=($c1&3)*64+($i&63);
$new_c1=($c1>>2)&5;
$new_i=$new_c1*256+$new_c2;
if ($new_i==1025){
$out_i=168;
} else {
if ($new_i==1105){
$out_i=184;
} else {
$out_i=$new_i-848;
}
}
$out.=chr($out_i);
$byte2=false;
}
if (($i>>5)==6) {
$c1=$i;
$byte2=true;
}
}
return $out;
}
Коментари:
Павлин Георгиев (21-02-2008 08:17) :
Mnogo пъти съм срешал проблеими от това естество и всеки пък съм ги кърпил някак.
С тези 2 функции всичко си дойде на мястото веднъж за винаги и факта че работят линейно ги прави доста бързи :)
Специални благодарности от http://chafy.netNikB (17-10-2010 16:17) :
Благодаря!
Много полезно.josifbg (29-01-2011 21:56) :
Не разбирам ... как точно да го използвам този скрипт.. в php файл ли?
Дори да го сложа в PHP файл не виждам къде да укажа името на базата която искам да конвертирам...
Може ли малко пояснение?
Благодаря!
Обратно към списъка със статиите
Тази страница последно е променяна на 2025-04-30 15:50:28