Kolimine cPanel’ile ja täpitähed

Mõned kliendid on uurinud, miks peale cPanelile kolimist on müstiliselt asendunud täpitähed kas mingite sümbolite või muude väärtustega, kas see on mingi suurem probleem? Vastus sellele on lihtne: ei ole suurem probleem! Siinkohal üritan lahti seletada võimalikud murekohad:

Programmeerimises on hea tava kasutada UTF-8 (mitte ansi vms.) kodeeringuga faile, kuna need on üheselt loetavad ning kuvatavad samalaadselt eri rakenduste vahel. (Vahemärkus: Alates aastast 2002 on erinevad Linuxi distributsioonid üle läinud UTF-8 peale alustades RedHat Linux 8.0’ist – Windowsil oleneb vaikimisi kodeering kas keelepaketist või seatud keelelistest sätetest)
cPaneli’i FileManager suudab tõrgeteta lugeda ja kirjutada UTF-8 kodeeringus olevaid faile. Kui juhtub, et failil on mõni muu kodeering (kui UTF-8), kuvatakse vaikimisi väljundis nende kirjamärkide asemel kas küsimärke või osadel juhtudel ka muid “tundmatuid märke”. Seega veebilehel ja/või FileManageri all kuvatakse samuti muid märke, kui täpitähti eelmainitud juhul. Kui faili enda encoding on UTF-8, kuvatakse märke korrektselt nii veebilehel kui ka filemanageris (samuti saavad sellest aru ka enamus levinumaid tekstiredaktoreid).
Samuti ei kasutata reeglina enam nö. hardcoded täpitähti failides vaid salvestatakse vajalik andmebaasi. HTML’i jaoks on aga HTML koodid, mis suudavad olenemata faili kodeeringust kuvada täpitähti ka veebilehtedel üheselt: HTML Codes Table
Lisaks pädeb sama ka failinimede korral – kui teil on failid/kaustad salvestatud kunagi ISO-5589-1 või ISO-5589-15 formaadis (ISO formaadis), siis kuvatakse neid täpitähti “imelike tähemärkidena”.
cPaneli kasutatav laad on vaikimisi UTF-8 toega – ehk kui kasutusel oli uuem kood, toimib teil kõik tavapäraselt.
Palju oleneb veebilehe kui ka failide ja andmebaasi kodeeringust ning kas vanal lehel olid need täpitähed nö. “hardcoded” ehk otse koodi sisse kirjutatud (ei ole hea praktika) või kasutati vastavaid HTML koode. Siinkohal tuleks uurida, kas:
– Teil on veebilehe charset määratud korrektselt lehe päises?
Näitena:

header('Content-Type: text/html; charset=ISO-8859-15');

Võib otse koodis lahendada palju probleeme eestikeelse toe puudumisel vananenud koodis.
– Teil on PHP poolne charset korrektselt määratud?

ini_set('default_charset','ISO-8859-15');

Võib otse koodis lahendada palju probleeme eestikeelse toe puudumisel vananenud koodis.
Lisainfot lehel: http://php.net/manual/en/ini.core.php#ini.default-charset – kus siis on täpsemini kirjeldatud, millised funktsioonid ja kuidas sõltuvad sellest määrangust.
– Kas teil on kasutusel htmlentities() ja tänu sellele ei toimi koodis korrektselt UTF-8 kuva?

htmlspecialchars($string, ENT_QUOTES, "UTF-8");

Oleks kindlasti parem lahendus, kuna ennetab ka osasid XSS ründeid.
– Teil on andmebaasiühendus määratud kasutama mõnda muud character setti?

mysqli_set_charset($link, "utf8");

Rohkem infot lehel: http://php.net/manual/en/mysqli.set-charset.php
(Lisaks tasuks uurida ka SET NAMES päringu võimalust, kui vanemas koodis MySQLi’d ei ole võimalik kasutada!)

Mida teha kui veebilehel ja Filemanageris on muud märgid kui vajalikud täpitähed?

NB! Järgnev teks pädeb ainult sel juhul, kui ka Filemanager näiteb erinevaid märke kui täpitähed! Järgnev tekst ei ole seotud teie veebilehe oma kodeeringu ega ka veebisirvija kodeeringuga!

1. Tuleks üle kontrollida faili enda kodeering
– Oma serverikontol
Saate seda teha SSH kaudu käsurealt käsuga:

file failinimi.misiganes

(Kus failinimi on siis teie soovitud faili nimi ning .misiganes on antud faili faililaiend)
Vastuseks tuleb enamasti antud faili kohta käiv info – näitena:
ISO-8859 kodeeringu puhul:

file failinimi.php 
failinimi.php: PHP script, ISO-8859 text

UTF-8 Unicode puhul:

file failinimi.php 
failinimi.php: PHP script, UTF-8 Unicode text

– Oma failiredaktoris
– Linuxi all piisab käsurealt “file” käsust
– Windowsi all:
Notepad++ Avades faili, on akna allosas paremal pool alt eelviimane kodeeringu kirje
Muude kodeeringute puhul kui “UTF-8 Unicode” tuleks muuta faili kodeeringut või luua uus fail UTF8 kujul (kodeeringuga).
Notepad – Avate faili notepadiga ja File -> Save as – peab kuvama UTF-8 – kui kuvab midagi muud vaikimisi, ei ole tegemist UTF8 kodeeringus oleva failiga
– Mac OSX all: piisab käsureal file -I või file -i või file –mime-encoding käsust (olenevalt süsteemi versioonist)

2. Tuleks faili kodeeringut muuta/üle salvestada/taasluua või kasutada korrektseid HTML koode
(NB! Alljärgnevad tegevused ei pruugi tagada umlaut tähtede allesjämist)

  • Filemanageriga tuleks luua uus fail, vana faili sisu ümber kopeerida (täpitähed tuleks uuesti sisestada) ja salvestada ning fail ümber nimetada.
  • Windowsi OS puhul tuleks avada fail lokaalses tekstiredaktoris ning salvestada UTF-8 kujul ja laadida uuesti serverisse, kirjutades üle vana faili. (Seejärel toimib ka avamine/kuvamine/salvestamine FileManageri kaudu)
  • Linuxis vi kaudu fail avada, lisada käsk “:set encoding=utf-8” (täpitähed tuleks uuesti sisestada) ja fail üle salvestada
  • Tuleks nö. hardcoded täpitähtede asemel kasutada HTML koode

Põhimõtteliselt saab vajadusel faili kodeeringut serveris käsurealt muuta ka iconv kui ka recode käskudega kuid nende kasutamist me pigem ei soovita tavakasutajale!

Comments are currently closed.