» »

PHP uničeni šumniki pri urldecode

PHP uničeni šumniki pri urldecode

peterd ::

Imam problem, ki mi para živce.

Preko urlja dobim vnos s šumniki npr.
testMsisdn.php?msisdn=xxxxxx&msg=odgovor%20%E8%E6%20%9A%9A%20%E6%E6%20%9E%9E%F0%F0%20konec

Šumniki se pretvorijo v urlkodiranje in so predstavljeni s posebnimi znakci. Vse lepo in prav.
Problem se pojavi ko hočem dobiti vsebino msg in je le ta v "čudnem" kodiranju.
Urldecode vem da ni kriv saj je request avtomatko urldecoded.

The superglobals $_GET and $_REQUEST are already decoded. Using urldecode() on an element in $_GET or $_REQUEST could have unexpected and dangerous results.


$msg = $_REQUEST["msg"];
$msg=str_replace(array("č","š","ž","Č","Š","Ž","đ","Đ","ć","Ć"),array("c","s","z","C","S","Z","dj","Dj","c","C"),$msg);

error_log("Kaj sem dobil".$msg);
$msg = iconv('UTF-8','ASCII//TRANSLIT',$msg);
error_log("Pokazi mi tekst ko je iconv koncan!! ".$msg );



Problem je da to samo deluje če je cel php fajl shranjen v ASCII formatu. Tega nočemo saj mora biti koda hranjena v UTF8 formatu. Tukaj pa hudič dobi mlade.
Ko pogledam izpis msg zagotovo vem da ni utf8 saj je ASCII ampak kako se lahko v ASCII tabelo sploh shranijo šumniki. Zakaj je to sploh delovalo???!

Kar koli poskušam da bi string msg pretvoril v UTF8 je brez uspeha. Zmeraj dobim samo "kvake" ki nečesar ne pomenijo. Tudi encodinga ne morem dobiti s mb_ check_ encoding.
Tako se šumniki ne morejo zamenjati(str_replace) in posledično crkne iconv saj vsebuje msg čudne znakce.

Ima kdo kako idejo? Bom zelo zelo zelo zelo hvaležen.

peterd ::

Napisal sem funkcijo ki gleda črko po črko in če je znak ččššđđžžćć ga zamenjam. To mi za zdaj dela. Boljšega ne najdem.
function replaceNonAsciiCharacters($str){
	$return = "";
	for($i = 0; $i < strlen($str); $i++)
	{
		$asciNum = ord($str[$i]);
		switch($asciNum){
			case 232://č
			$return .= "c";
			break;
			
			case 200://Č
			$return .= "C";
			break;
			
			case 154://š
			$return .= "s";
			break;
			
			case 138://Š
			$return .= "S";
			break;	
			
			case 158://ž
			$return .= "z";
			break;
			
			case 142://Ž
			$return .= "Z";
			break;

			case 230://ć
			$return .= "c";
			break;
			
			case 198://Ć
			$return .= "C";
			break;
			
			case 240://đ
			$return .= "dj";
			break;
			
			case 208://Đ
			$return .= "Dj";
			break;
			
			default:
			$return .= $str[$i];
			break;
		}
		
	}
	return $return;
}

680x0 ::

1.) Uporabi POST namesto GET
2.)
function urle_ncode($string){
    return urlencode(utf8_encode($string));
}
   
function url_decode($string){
    return utf8_decode(urldecode($string));
}

Zgodovina sprememb…

  • spremenil: 680x0 ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[PHP]Zamenjava šumnikov z html kodami

Oddelek: Programiranje
153908 (2186) mikesr
»

[c#] Ustvarjanje objekta v drugem razredu

Oddelek: Programiranje
81577 (1522) Cvenemir
»

[php]$_POST iz šumnikov v nešumnike

Oddelek: Izdelava spletišč
71480 (1392) Gost
»

uporaba C++ unmanaged kode v C#.NET projektu

Oddelek: Programiranje
111833 (1556) krho
»

Encoding

Oddelek: Izdelava spletišč
81389 (1269) gerrno

Več podobnih tem