Архив

Статии по ключова дума: ‘конвертирате’

Пет Онлайн Docx към Doc конвертори

5 декември, 2009 Няма коментари

Новият Microsoft Office 2007 по подразбиране записва и работи с файлов формат .docx , вместо със стария формат .doc . Новият формат .docx не е съвместим със по- старите версии на MS Office. За щастие има решение как да конвертирате новият формат .docx към стария .doc и то онлайн. Има решение което е Standalone и се предоставя от Microsoft като допълнение на вашият стар офис :) . Ето ги тези пет онлайн конвертори от .docx към .doc

1. OConvert
Позволява да конве
ртирате файлове от docx към doc,odt,txt,pdf и други популярни формати.
oconverter

2. Zamzar

Доста често един от най- популярните сайтове в интернет за конвертиране. Поддържа много формати
zamzar


3. Docx2doc

Още един сайт за конвертиране между docx и doc файлове. Позволява и конвертиране от и на други формати.
docx2doc


4. Comet Docs

Конвертира документи онлайн безплатно. Включително PDF, Word, Excel, TXT или дори снимки
cometdocs

5. Convertfiles

Безплатен и простичък файлов конвертор с поддръжка на много файлове.
convertfiles

Извод: Аз лично препоръчвам да ползвате първия онлайн конвертор(OConvert) защото е напълно свободен(безплатен), не изисква email или с една дума -- работи

Често срещани проблеми с encoding при php

19 октомври, 2009 2 коментари

Случвало ли ви се е да имате стринг които е написан с cp1251 и които да искате да конвертирате в utf-8. Най- вероятно да, но случвало ли ви се е да имате стринг които е написан или на cp1251 или на utf-8 предполагам, че на доста няма да им се е налагало затова реших да напиша тази публикация за лесното на следващите след мен.
Имаме стринг "Това е текст" но незнаем на какъв енкодинг е. Преди да го конвертираме в utf-8 или cp-1251 първо трябва да знаем какъв е и след това е ясно. Ето разиграно решение:

<?php

$s_utf8=iconv("CP1251","UTF-8","Това е текст- ЮТФ-8");
$s_cp1251="Това е текст- ЦП1251";

$check1=mb_detect_encoding($s_utf8,'UTF-8,CP1251');
$check2=mb_detect_encoding($s_cp1251,'UTF-8,CP1251');

echo "[$s_utf8 <-><b>$check1</b>] -- [$s_cp1251 <-> <b>$check2</b>]";

?>

Ето примерен проблем при конвертиране с iconv:

<?php
iconv("UTF-8","CP1251",$s_cp1251);
iconv("CP-1251","UTF-8",$s_utf8);
?>

В горното казваме, че искаме да конвертираме UTF-8 към cp-1251, но това няма как да се реализира понеже стринга е CP1251. Същата тази грешка се получава и при следващото . Именно поради тази причина преди да се конвертира даден стринг към друг енкодинг трябва да се знае какъв е бил преди и какъв да бъде след.

Ето ви две функции за конвертиране от UTF8 към CP1251 и втората отново за конвертиране на CP1251 към UTF8, но с проверка за текущия входящ стринг. При тези две функции може да конвертирате без наличие на iconv.

function cp1251_to_utf8($s)
{
function detect_encoding($string)
{
static $list = array('utf-8', 'windows-1251');
foreach ($list as $item)
{
$sample = iconv($item, $item, $string);
if (md5($sample) == md5($string))
return $item;
}
return null;
}

if ( (detect_encoding($s)) == "windows-1251")
{
$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;
}
else
{
return $s;
}
}//End of function cp1251_to_utf8($s)

function utf8_to_cp1251($s)
{
if ((mb_detect_encoding($s,'UTF-8,CP1251')) == "UTF-8")
{
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;
}
else
{
return $s;
}
}