ugrás a tartalomhoz

URL dekódolás

Anonymous · 2005. Május. 28. (Szo), 16.47
Gugli kereső szavakat akarom visszafejteni, ezt adatbázisba felírkálni (statisztika; milyen szavakra keresnek és dobja ki a linkem a gugli, esetleg más keresők).

Kód:

$sztring = "%C3%81%C3%A1%C3%89%C3%A9%C3%8D%C3%AD%C3%93%C3%B3%C3%96%C3%B6%C5%90%C5%91%C3%9A%C3%BA%C3%9C%C3%BC%C5%B0%C5%B1";

echo htmlentities(utf8_decode(urldecode($sztring)));
Kérdés:
ŐőŰű karaktereket hogy kaphatnám vissza - előre definiált érték keresése majd csere a helyes karakterre trükközés nélkül? Végső esetben ez is megtenné, akkor viszont kellene egy táblázat azokkal a karakterekkel (és a kódolás utáni értékekkel), amit az utf8 és url decode az ŰűŐő karakterekhez hasonlóan nem tud visszafejteni - ilyet nem találtam sehol.
Az ötleteket előre is köszönöm...
 
1

iconv

attlad · 2005. Május. 28. (Szo), 17.26
PHP manualból:
utf8_decode -- UTF-8 kódolt sztring ISO-8859-1 karaktereit egybájtos ISO-8859-1 karakterekre cseréli


Az ISO-8859-1-ben nincsenek benne az említett karakterek, neked gondolom az kéne, hogy ISO-8859-2 karakterekre kódolja.

Erre javasolt az iconv használata, általában fel van telepítve.

Tehát utf8_decode() helyett:
iconv('UTF-8', 'ISO-8859-2', $string);

De még jobb megoldás lenne, ha UTF-8 kódolást használnál és akkor nem kell átkódolgatni, meg nincs olyan, hogy egy karakter nincs benne a használt karakterkészletben.

Ha nincs iconv vagy hasonló, akkor meg is írhatod a saját UTF-8 -> ISO-8859-2 átkódolót, ha csak az ékezetes karaktereket kódolod át, az nem is olyan nagy munka, UTF-8 karaktertáblából kikeresed az ékezetes betűk kódját és pl. strtr() függvénnyel átkódolod a neki megfelelő ISO-8859-2 kódra.

Ja és Google keresés URL nem feltétlenül UTF-8-ba van kódolva, lehet, hogy ISO-8859-2-t használt a kereső mert meg lehet adni azt is Google-nek, pl.:
http://www.google.com/search?hl=en&ie=iso-8859-2&q=%E1rv%EDzt%FBr%F5+t%FCk%F6rf%FAr%F3g%E9p

Szóval úgy lenne kerek a megoldás, ha feldolgoznád az URL-t, hogy van-e benne ie (input encoding) paraméter és annak az értéke szerint kódolnád vissza, bár elég ritka, hogy nem UTF-8 szóval nem biztos, hogy megéri.

Attila
2

Perfect

Anonymous · 2005. Május. 28. (Szo), 18.03
Ha azt mondod, hogy általában feltételezhető az iconv megléte, elhiszem. :) A megoldás tökéletes, köszönöm.

Az URL eleve fel van dolgozva, hogy kicsaljam belőle a q= értékét, szal innentől már semmiből nem tart csekkolni az ie értékét is. Mégegyszer köszönöm, azt hittem bonyolultabb lesz :)
3

Honnan tudhatom milyen kodolással jön az url?

klimakiraly · 2005. Szep. 5. (H), 22.03
Sziasztok

Hogyan oldjátok meg a decodolást.
Én probálom az iconv( "UTF-8", "ISO-8859-2", $honnan);
De ha nem ebben a fromában jőn akkor levág belöle. :-(

K.K.
4

urldecode() miért nem elég

Hojtsy Gábor · 2005. Szep. 6. (K), 10.36
Mi nem elég az urldecode()-ban?
5

Lehet csak nem értek hozzá. :-(

klimakiraly · 2005. Szep. 6. (K), 17.11
Helló!

Ilyeneket találok a MySQL táblámban http://www.google.co.hu/search?hl=hu&q=klĂ­ma tisztĂ­tĂĄs&btnG=Google keresĂŠs&meta=, egy ilyen PHP kód után $honnan = urldecode($_GET['honnan']);.

Köszönet ha tudsz rajtam segiteni.

K.K.
7

szép UTF8

Hojtsy Gábor · 2005. Szep. 6. (K), 19.01
Tessék az oldalt UTF-8 kódolással generálni, ott rögtön szépen látszik majd ez az ékezetes dolog.
<?php
header("Content-type: text/html; charset=utf-8");
6

Input encoding

attlad · 2005. Szep. 6. (K), 17.36
Google URL-ek esetén amelyiknél levág belőle feltételezem, hogy szerepel az URL-ben egy ie paraméter is, nem? Azt kell vizsgálnod, olvasd el az 1. hozzászólás végét. Most megnéztem egy saját referrer statot és nem is olyan ritka, hogy pl. ie=ISO-8859-2 kódolással érkezik.

Attila
8

Igen van olyan is, meg ...

klimakiraly · 2005. Szep. 6. (K), 19.08
Helló!

Én arra gondolok hogy nem csak google, valami mindig jó megoldás nincs?
Pl. itt mit tegyek?
http://talalat.kurzor.hu/Keres?query=pĂĄrĂĄtlanĂ­tĂł&start=20&hitsPerPage=1
Vagy
http://www.google.com/search?num=30&hl=hu&inlang=pl&newwindow=1&q=LG lĂŠgtisztĂ­tĂł&lr=lang_h

Nem lehet ezt valahogy lekérdezni, hogy mivel jön?


K.K.
9

utf8 felismerhető

Hojtsy Gábor · 2005. Szep. 6. (K), 19.18
Hát az utf8 felismerhető, mert speciális bájt szekvenciák vannak. Bár konkrétan a magyar betűket a legegyszerűbb felismerni, és valamilyen latin-2 kódolásra fordítani mondjuk. Itt van a Weblabor saját különbejáratú forráskódjából az utf8->latin2 átkódoló:
<?php
/*
  UTF-8 kódolású szöveget ISO-8859-2-es kódolásúvá alakít.
*/
function wllib_utf8_to_iso88592($text) {
  $text = preg_replace("/([\xC2\xC3])([\x80-\xBF])/e",
         "chr(ord('\\1')<<6&0xC0|ord('\\2')&0x3F)",
         $text);
  $text = preg_replace("/\xC5\x91/", "\xF5", $text); // o"
  $text = preg_replace("/\xC5\x90/", "\xD5", $text); // O"
  $text = preg_replace("/\xC5\xB1/", "\xFB", $text); // u"
  $text = preg_replace("/\xC5\xB0/", "\xDB", $text); // U"
  $text = preg_replace("/\xE2\x80\x9E/", "\"", $text); // ,,
  $text = preg_replace("/\xE2\x80\x9D/", "\"", $text); // ``
  return($text);
}
10

Honnan tudom hogy erre functionra küldjem.

klimakiraly · 2005. Szep. 6. (K), 19.31
Helló És honnan tudjam hogy erre a functionra kell küldenem a referert?
Ha jól veszem észre ha nem UTF-( akkor tönkre teszi, tehát valami szerint válogatni kellene.
Vagy nem jól tudom/gondolom?

K.K.
11

nem értelmes másképp

Hojtsy Gábor · 2005. Szep. 6. (K), 19.45
Hát nem igazán értelmes másképp (magyarul legalábbis) a karaktersorozat, ha ezek a bájt szekvenciák vannak benne, és nem UTF-8. Olyan karaktersorozattal szerintem te nem fogsz találkozni.
12

Kapisgálom .. és.

klimakiraly · 2005. Szep. 6. (K), 20.02
Helló!

Értelek, és ha minden igaz müködik is.

És használhatom is az icike picike céges weboldalam referer átalakitgatására?
Vagy azt azért még se?

Köszi K.K.
13

hát most már

Hojtsy Gábor · 2005. Szep. 6. (K), 20.34
Ha a licencére gondolsz, akkor most hogy publikáltam (upsz? :), nyugodtan.
14

Köszi!

klimakiraly · 2005. Szep. 6. (K), 20.37
Helló!

Köszi, köszi, köszi.

K.K.
15

eljött a php 7.2

klimakiraly · Már. 29. (Cs), 15.42
Eljött php 7.2.0 hozzám is, na és ez a kód idestova 12 év után elhalt. Keresem az okát de nem igazán találom a megoldást ... :-( Addig jutottam hogy az első sor hal el, valami változhatott a beírásban de hogy mi azt nem tudom kiszedni a phpnet-ből.
16

The /e modifier of

inf3rno · Már. 29. (Cs), 16.11
The /e modifier of preg_replace() has been removed with PHP 7.0 (‣RFC), but it still exists for mb_ereg_replace()


Egyébként már ideje volt törölni azt a szennyet, bármikor tudsz PHP kódot injektálni, ha evallal mennek a dolgok és a fejlesztő nem figyel oda eléggé, hogy mit csinál. Használd ezt helyette: http://php.net/manual/en/function.preg-replace-callback.php
17

iconv

klimakiraly · Már. 29. (Cs), 16.48
Szia,

Köszönöm, most úgy fest az $honnan = iconv("UTF-8", "ISO-8859-2", $honnan); megcsinálja amit szeretnék.

Sajnos nekem az eval nem igen mond sokat, igyekszem utána olvasni.
18

mb_convert_encoding

Pepita · Ápr. 3. (K), 08.32
mb_convert_encoding kicsit "ügyesebb", főleg akkor hasznos, ha nem ismert a forrás kódolása.