Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Dekodowanie url
Forum PHP.pl > Forum > PHP
potreb
Witam.
Potrzebuje porady na temat przesyłania danych z formularza metodą get.
Dane pochodzą z wyszukiwarki. Pod IE polskie znaki są zakodowane natomiast pod Firefox jeżeli wkleję link dopiero się kodują tak jak w IE.
Jak najlepiej zabezpieczyć się przed źle zakodowanymi znakami w urlu.
hostingekspert
użyj urldecode i urlencode
potreb
Spojrzałem szybciej do manuala, jednak mam problem.
W jaki sposób zakodować dane w url wszelkie, które się tam pojawiają.
kamil_biela
Chyba nie do końca rozumiem Twój problem. Jeśli dobrze ustawisz kodowanie strony, to przeglądarka powinna dobrze zakodować url'a. Jeśli chcesz mieć pewność to przesyłaj POSTem
potreb
Wszystko mam w kodowaniu utf-8.
Przesyłając z wyszukiwarki dane metodą GET za pierwszym razem w pasku adresu polskie fonty są poprawnie wyświetlane, jeżeli wkleję te same dane do pasku adresu , to polskie czcionki się zakoduję w czym nie wiem.
Kod
?p=search&nazwisko=trrtrere%B9%9C%E6%9C&imie=&telefon=&pokoj=P


Przykład google:
Wklej: http://www.google.pl/search?q=ąśćśąą
Wtedy polskie czcionki się rypną, podaje jedynie przykłąd firefoxa, o dziwo IE nie ma problemu z urlencode.
Jeżeli będę chciał przesłać dane POSTEM, nie będę miał problemu, z tym, że aplikację całą napisałem pod GET, plus sortowanie. Musiałbym zmienić trochę oskryptowanie :/
Nie lubię obejść, szukam rozwiązania.
kamil_biela
Edit:

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

Szczerze mówiąc, dalej nie wiem w czym problem.
potreb
smile.gif Okey, wiem, że dane są już zakodowane.
I teraz chcąc odkodować:
  1. <?php
  2. echo urldecode($_GET['nazwisko']);
  3. ?>


Jednak jeżeli zmienię kodowanie na windows-1250 poprawnie się wyświetlą czcionki.
kamil_biela
Po co chcesz dekodować, skoro wg dokumentacji one już są zdekodowane. Wygląda raczej mi to na problem kodowania strony / wysyłanych header'ów przez serwer.

EDIT:

Jak robisz to na jakimś zewnętrznym serwerze, wrzuć linka, będzie szybciej
potreb
Masz rację. Jednak problem występuje tak jakby dla kodowania. Url są popranie dekodowane, a poprawnie litery wyświetlane w kodowaniu windows-1250, choć cała strona jest na utf.

Server IIS, teraz testy robię na Apachu.
Szlag mnie trafi. Niestety nie mam aplikacji w sieci, i nigdy ona nie będzie dostępna.
erix
Cytat
Wtedy polskie czcionki się rypną, podaje jedynie przykłąd firefoxa, o dziwo IE nie ma problemu z urlencode.

Z tego, co pamiętam, to musisz sprawdzać user_agent i konwertować. Niestety, nie jestem w stanie w tej chwili przytoczyć źródeł...

Podejrzewam, że rozwiązanie można by było znaleźć w źródłach skryptu Wikipedii; tam są URL-e przekazywane ze znakami narodowymi.
kamil_biela
Zobacz czy Ci IIS nie wpycha jakiś domyślnych nagłówków z kodowaniem do odpowiedzi. Pod firebugiem czy czego tam używasz tongue.gif.
potreb
Po zastosowaniu:
  1. <?php
  2. $str = ($_GET['nazwisko']);
  3. $return = iconv('cp1250', 'utf-8', $str);
  4. echo $return;
  5. ?>


Poprawnie mi wyświetla dane. Nie wiem naprawdę od czego to zależy. Zobaczę jutro pod IIS, jak się będzie zachowywał.

I funkcja
  1. <?php
  2. function decode($str) {
  3.    if(mb_detect_encoding($str, "auto") == 'UTF-8') {
  4.        return $str;
  5.    } else {
  6.        $str = iconv('cp1250', 'utf-8', $str);
  7.        return $str;
  8.    }
  9. }
  10. ?>


Co do źródeł wiki. Zrobiłem test i niestety wywala ś z urla w wiki :/
Nie wiem czy się czepiam, ale chcę mieć pewność, że wszystko będzie działać w należyty sposób.

Dzięki za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.