Autor | Zpráva | ||
---|---|---|---|
Owery Profil |
#1 · Zasláno: 11. 11. 2012, 10:46:47
Zdravím,
mám problém s kódováním u jednoduchého ajax scriptu. V souboru index.php mám v hlavičce: <meta http-equiv="content-type" content="text/html; charset=utf-8"> <script src="js/jquery-1.7.2.js" type="text/javascript" charset="utf-8"> <?php header("Content-Type: text/html; charset=utf-8"); ?> Už si nevím rady.. Cílem mého scriptu je prohození věty, vypíše mi ji to pozpátku, ale mám problém s diakritikou a vypisují se mi neznáme znaky namísto háčků a čárek (PS: kódování daných souborů mám samozřejmě take UTF-8) Kdyby mi někdo poradil jak s tím byl bych moc vděčný, já osobně si už s tím nevím více rady |
||
Mike8748 Profil |
#2 · Zasláno: 11. 11. 2012, 10:49:20
Owery:
a neotáčíš ten text náhodou pomocí strrev ? otočení utf8 textu není tak snadné, znaky s diakritikou jsou přes jeden bajt, a tím že to po bajtech otočíš (právě pomocí strrev) tak utf8 text samozdřejmě rozbiješ |
||
Owery Profil |
#3 · Zasláno: 11. 11. 2012, 10:51:49
Mike8748: Otáčím text strašně složitě, jde jen o zkušební účel.. zde mám kód
<?php header("Content-Type: text/html; charset=utf-8"); $text = $_POST['text']; $delka = strlen($text); $pole = chunk_split($text, "1", "."); $pole = explode(".", $pole); $citac = 0; for($a = $delka-1; $a > -1; $a--){ $final[$citac] = $pole[$a]; $citac++; } echo(implode($final, "")); ?> |
||
Mike8748 Profil |
#4 · Zasláno: 11. 11. 2012, 10:57:23
Owery:
ano, chunk_split tím rozděluješ ten text po 1 bajtu, a tím to rozbiješ. zkusit můžeš např. tuto funkci (mam to z google, snad funguje dobře) function UTF8Reverse($Input) { $Result=''; $Characters=array(); $IL=strlen($Input); for($i=0;$i<$IL;$i++) { // ref: http://en.wikipedia.org/wiki/UTF-8#Description // my implementation of the information provided in the Wikipedia link $B=array(); for($j=0;$j<4;$j++) $B[$j]=($i+$j<$IL)?ord($Input{$i+$j}):0; if(($B[0]>>7)==0) $Characters[]=$B[0]; if(($B[0]>>5)==6&&($B[1]>>6)==2) $Characters[]=($B[0]-192)*64+($B[1]-128); if(($B[0]>>4)==14&&($B[1]>>6)==2&&($B[2]>>6)==2) $Characters[]=($B[0]-224)*4096+($B[1]-128)*64+($B[2]-128); } $Characters=array_reverse($Characters); // this is the reversal part, this could be anything else you want foreach($Characters as $Char) { // ref: http://home.tiscali.nl/t876506/utf8tbl.html // bit masking, shifting, and bitwise OR done by me, har har if(($Char>>7)==0) $Result.=chr($Char); else if((($Char>>7)|15)==15||($Char>>11)==0) $Result.=chr(192+$Char/64).chr(128+$Char%64); else if((($Char>>11)|31)==31||($Char>>16)==0) $Result.=chr(224+$Char/4096).chr(128+$Char/64%64).chr(128+$Char%64); } return($Result); } a v tvém skriptu bude akorát header("Content-Type: text/html; charset=utf-8"); $text = $_POST['text']; echo UTF8Reverse($text); |
||
Owery Profil |
#5 · Zasláno: 11. 11. 2012, 11:05:18
Už to funguje! Děkuji moc.. sám bych na to nepřišel .. nejspíš to nejde bez té funkce ani v jiných kódováních, zkoušel jsem ještě windows a taky to nešlo.. Jsem velkým dlužníkem :)
|
||
Časová prodleva: 11 let
|
0