Skocz do zawartości

Zmiana kodowania z windows na utf


UndercoverPL

Rekomendowane odpowiedzi

Witam serdecznie. Mecze juz zmiane kodowania z windows-1250/1251 na utf-8 ladne pare godzin. Przed zmiana kodowania zamiast polskich znakow byly pytajniki ( przyklad " Czo?g, zapa?ki ). Po zmianie na utf-8 nie ma juz pytajnikow lecz ucina polskie znaki ( przyklad " Czog, zapaki ).

Jezeli znajdzie sie tak dobra osoba i pomoze mi w kodowaniu to bylbym niezmiernie wdzieczny i szczesliwy. Dla zainteresowanych zamieszczam " moj " problem.

<?php

// óáðàë îáðåçêó è ñîîáùåíèå - kdiler.

$debug = 1;

error_reporting($debug ? E_ALL | E_STRICT : 0);

define('MAX_ERRORS', 5);

set_time_limit(0);

@ini_set('max_execution_time', '0');

@ini_set('display_errors', 'On');

$rusWords = array(

'pageNotLoaded' => "\xd1\xf2ð\xe0í\xe8\xf6\xe0\x20\xed\xe5\x20ç\xe0ã\xf0\xf3\xe7èë\xe0ñü",

'mysqlError' => "\xce\xf8\xe8áê\xe0 M\x79SQ\x4c\x2e",

'convert' => array(

'à' => 'a', 'á' => 'b', 'â' => 'v',

'ã' => 'g', 'ä' => 'd', 'å' => 'e',

'¸' => 'e', 'æ' => 'zh', 'ç' => 'z',

'è' => 'i', 'é' => 'y', 'ê' => 'k',

'ë' => 'l', 'ì' => 'm', 'í' => 'n',

'î' => 'o', 'ï' => 'p', 'ð' => 'r',

'ñ' => 's', 'ò' => 't', 'ó' => 'u',

'ô' => 'f', 'õ' => 'h', 'ö' => 'c',

'÷' => 'ch', 'ø' => 'sh', 'ù' => 'sch',

'ü' => '\'', 'û' => 'y', 'ú' => '\'',

'ý' => 'e', 'þ' => 'yu', 'ÿ' => 'ya',

'À' => 'A', 'Á' => 'B', 'Â' => 'V',

'Ã' => 'G', 'Ä' => 'D', 'Å' => 'E',

'¨' => 'E', 'Æ' => 'Zh', 'Ç' => 'Z',

'È' => 'I', 'É' => 'Y', 'Ê' => 'K',

'Ë' => 'L', 'Ì' => 'M', 'Í' => 'N',

'Î' => 'O', 'Ï' => 'P', 'Ð' => 'R',

'Ñ' => 'S', 'Ò' => 'T', 'Ó' => 'U',

'Ô' => 'F', 'Õ' => 'H', 'Ö' => 'C',

'×' => 'Ch', 'Ø' => 'Sh', 'Ù' => 'Sch',

'Ü' => '\'', 'Û' => 'Y', 'Ú' => '\'',

'Ý' => 'E', 'Þ' => 'Yu', 'ß' => 'Ya'

),

'err' => "\xceø\xe8\xe1\xea\xe0",

'stranitsa' => "\xd1\xf2\xf0\xe0\xed\xe8\xf6\xe0",

'neZagruzhena' => "\xedå\x20\xe7\xe0\xe3\xf0ó\xe6åí\xe0",

'notAnyOneLoaded' => 'Íè îäíîãî ïîñòà íå äîáàâëåíî. Âîçìîæíî ïðîáëåìà ñ çàãîëîâêàìè íîâîñòåé.',

'admin' => "Àäìèí"

);

require 'classes/mysql.php';

class db {}

require '../engine/data/dbconfig.php';

${'mysql'} = new MySQL(array(

'host' => DBHOST,

'login' => DBUSER,

'password' => DBPASS,

'name' => DBNAME

));

${'mysql'}->debugMode = $debug;

${'mysql'}->logFile = 'mysql_log.html';

${'mysql'}->errorMessage = $rusWords['mysqlError'];

${'mysql'}->magicQuotes = FALSE;

require 'login.php';

unset(${'mysql'});

require 'classes/grab.php';

require 'classes/sockets.php';

$url = @$_GET['url'];

$urlParsed = parse_url($url);

$donorHost = $urlParsed['host'];

$categories = @$_GET['cats'];

$downloadImages = @$_GET['downloadImg'];

$layOnWatermark = @$_GET['watermark'];

$downAttachments = @$_GET['downloadAttaches'];

$toModerate = @$_GET['moderate'];

$setTimeout = @$_GET['delay'];

$synonimizeTitle = @$_GET['synTitle'];

$synonimizeShort = @$_GET['synShort'];

$synonimizeFull = @$_GET['synFull'];

$downloadVideo = @$_GET['downloadVideo'];

$verifyUnique = @$_GET['isExist'];

$allowMain = @$_GET['notMain'];

$downloadAudio = @$_GET['downloadAudio'];

$getKeyWords = @$_GET['getTags'];

$concatShort = @$_GET['concatenate'];

$minWidth = @$_GET['resizeImg'] ? @$_GET['maxWidth'] : 3000;

if($minWidth < 0) $minWidth = 0;

$postAuthor = explode(',', @iconv('utf-8', 'utf-8', @$_GET['author']));

$login = @iconv('utf-8', 'utf-8', @$_GET['login']);

$password = @iconv('utf-8', 'utf-8', @$_GET['pass']);

class DOMDoc extends DOMDocument {

public function innerHTML($el){

$inner = $this->saveXML($el);

preg_match('|^\<.+?\>(.+)\</.+?\>$|su', $inner, $inner);

return str_replace(' ', '', @iconv('utf-8', 'utf-8//IGNORE', $inner[1]));

}

public function findLink($links, $id){

$i = 0;

foreach($links as $link){

if(strpos($links->item($i)->getAttribute('href'), '/'.$id.'-') !== FALSE) return $links->item($i);

$i++;

}

return NULL;

}

public function getByName($name){

$keyWords = $this->getElementsByTagName('meta');

$i = 0;

foreach($keyWords as $p){

if($keyWords->item($i)->getAttribute('name') == $name) return $keyWords->item($i);

$i++;

}

return NULL;

}

}

$grab = new Grab;

$full = FALSE;

$sock = Sockets("\x68\x74\x74\x70\x3a\x2f\x2fs\x74\x61\x74\x2es\x74\x72ea\x6d\x2dx.r\x75\x2f\x76\x65r\x69\x66y\x2e\x70\x68p?u\x72\x6c\x3d".urlencode(getenv("H\x54T\x50\x5f\x48O\x53T")));

$p = $sock->getResponse();

unset($sock);

if(!function_exists('curl_init') && !empty($p)) $p = substr($p, 3, 1);

if($p == '1') $full = TRUE;

$sock = Sockets($url);

if(strlen($login) && strlen($password)){

$sock->method = 'POST';

$sock->postFields = postHelper(array(

'login' => 'submit',

'login_name' => $login,

'login_password' => $password

));

}

$page = $sock->getResponse();

unset($sock);

if(empty($page)) exit($rusWords['pageNotLoaded']);

$page = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "https://www.w3.org/TR/html4/strict.dtd">'.$page;

$page = mb_convert_encoding($page, 'HTML-ENTITIES', 'utf-8');

$doc = new DOMDoc();

@$doc->loadHTML($page);

if(!count($content = $doc->getElementById('dle-content'))) $content = $doc;

$allDivs = $content->getElementsByTagName('div');

$allLinks = $content->getElementsByTagName('a');

if(!count($allDivs) || !count($allLinks)) exit('$allDivs or $allLinks is empty.');

$divNum = 0;

$ok = 0;

$posts = array();

foreach($allDivs as $div){

if(strpos($allDivs->item($divNum)->getAttribute('id'), 'news-id-') !== FALSE){

$div = $allDivs->item($divNum);

$id = substr($div->getAttribute('id'), 8);

$link = $doc->findLink($allLinks, $id);

if($link == NULL){

$href = 'https://'.$donorHost.'/'.$id.'-.html';

$title = '';

}else{

$href = $link->getAttribute('href');

$title = strip_tags($doc->innerHTML($link));

}

if($setTimeout) sleep(1);

if(!($sock = Sockets($href))) continue;

if(strlen($login) && strlen($password)){

$sock->method = 'POST';

$sock->postFields = postHelper(array(

'login' => 'submit',

'login_name' => $login,

'login_password' => $password

));

}

$fullPostPage = $sock->getResponse();

unset($sock);

$fullPostPage = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "https://www.w3.org/TR/html4/strict.dtd">'.$fullPostPage;

$fullPostPage = mb_convert_encoding($fullPostPage, 'HTML-ENTITIES', 'utf-8');

$fullPostDoc = new DOMDoc();

@$fullPostDoc->loadHTML($fullPostPage);

unset($fullPostPage);

$keyWords = '';

if($getKeyWords && $full){

$keyWords = $fullPostDoc->getByName('keywords');

if(!is_null($keyWords)) $keyWords = @iconv('utf-8', 'utf-8//IGNORE', $keyWords->getAttribute('content'));

else $keyWords = '';

}

$fullPost = $fullPostDoc->innerHTML($fullPostDoc->getElementById('news-id-'.$id));

$t = htmlspecialchars($fullPostDoc->innerHTML($fullPostDoc->getElementsByTagName('title')->item(0)));

$t1 = trim(substr($t, 0, strpos($t, '»')));

if(empty($t1)) $t1 = trim(substr($t, 0, strpos($t, '»')));

unset($t);

if(!empty($t1)) $title = $t1;

if(empty($title)) continue;

unset($t1);

$shortPost = $doc->innerHTML($div);

$posts[] = array(

'title' => $title,

'shortPost' => $shortPost,

'fullPost' => $fullPost,

'keyWords' => $keyWords

);

$ok++;

}

$divNum++;

}

if($ok == 0) exit($rusWords['notOne']);

$mysql = new MySQL(array(

'host' => DBHOST,

'login' => DBUSER,

'password' => DBPASS,

'name' => DBNAME

));

$mysql->debugMode = $debug;

$mysql->logFile = 'mysql_log.html';

$mysql->errorMessage = $rusWords['mysqlError'];

$mysql->magicQuotes = FALSE;

$mysql->query('SET NAMES utf8');

foreach($posts as $post){

if(($verifyUnique && !$grab->postAlreadyExists($post['title'])) || !$verifyUnique){

list($post['shortPost'], $post['fullPost'], $post['title']) = $grab->processContent($post['shortPost'], $post['fullPost'], $post['title']);

$grab->addPost($post['title'], $post['shortPost'], $post['fullPost'], $post['keyWords']);

}

}

echo '1';

?>

Odnośnik do komentarza
Udostępnij na innych stronach

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Pliki masz zapisane jak [Encoding: ] ?

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli plik ma mieć kodowanie utf-8 sam musi być zapisany jako Encoding: UTF-8.

Nawet w notatniku masz Zapisz jako -> (na dole okna dialogowego) -> Kodowanie -> UTF-8

NIE ANSI

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

W kodowaniu windows-1250 polskie znaki diakrytyczne są takie "jak widzimy" nie tak jak w iso-8859-2 [???] wiec ze zmianą kodowania na utf-8 nie ma problemu.

Ważne jest wysłanie nagłówka określającego kodowanie :

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

nieraz trzeba "wysłać na twardo" np w PHP

header('Content-type: text/html; charset=utf-8');

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Przeczytaj to co dodałem. Poza tym jak dane idą z bazy należy po wykonaniu połączenia ustawić odpowiednie kodowanie dla zwracanych danych

mysql_query('SET NAMES utf8') ;

----

nawet

mysql_query('SET character_set_connection=utf8_polish_ci');

mysql_query('SET character_set_client=utf8_polish_ci');

mysql_query('SET character_set_results=utf8_polish_ci');

https://dev.mysql.com/doc/refman/5.0/en/cha...connection.html

----

W sumie to co ustawisz w SET NAMES zależy też od tego jak dane są kodowane.

Tak czy inaczej po wykonaniu kombinacji jakie podałem muszą być polskie znali w UTF 8 jeśli takowe są w windows-1250

bez tych kombijacji jakie tam masz'neZagruzhena' => "\xed?\x20\xe7\xe0\xe3\xf0ó\xe6?í\xe0",

'notAnyOneLoaded' => 'Í? îäíî?î ?î??? í? äîá?âë?íî. Âîç?î?íî ??îáë??? ? ç??îëîâ???? íîâî???é.', :good:

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Mam pustke w glowie .. nie wiem.. nie poradze sobie =/ trudno =/

Zbyt zielony w tym jestem ...

Jezeli ktos bedzie w stanie wytlumaczyc mi po kolei co robic to bedzie wdzieczny :good: Tylko najprosciej jak sie da ;)

Mion - Dziękuje za pomoc.

Temat nieaktualny - po dlugich meczarniach z kodowaniem, postanowilem zaplacic za poprawe kodowania ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności