Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dekodowanie url'a
Forum PHP.pl > Forum > PHP
tomkiii
Mam problem z poprawnym odkodowaniem URL'i do UTF-8. Probowałem iconv
i mb_encoding... bez skutku, jeżeli działa dla jednego URL'a to dla
drugiego już nie i odwrotnie.

Przykładowe URL'e:

1) site.com/ko%C5%82ki.html
2) site.com/cz%B3owiek.html
3) site.com/materia%u0142y.html

dla 1 dziala: url_decode($URL);
dla 2 dziala: mb_convert_encoding( $URL, 'UTF-8', 'ISO-8859-2');
dla 3 dziala: http://pl2.php.net/manual/pl/function.utf8-decode.php#76250

natomiast nie mam pomysłu jak odróżnić 1 od 2 i zastosować do tego
odpowiednie kodowanie - mb_detect_encoding() dla 1 i 2 wskazuje tak
samo UTF-8, zawsze wychodzą jakieś niuanse, jeżeli ktoś już pracował
na url'ach w ten sposób zapewne pisał coś podobnego.

Pozdrawiam Serdecznie i czekam na pomoc.
matix
Myślę, że pomoże funkcja iconv.

A tak pozatym napisz sobie prosta klasę, nawet zwykłą funkcję która będzie czyściła string z niepotrzebnych znaków. Jeden prosty str_replace + 2 lub nawet jeden array winksmiley.jpg

Kombinuj, pozdro smile.gif
tomkiii
Niestety ale, taka odpowiedź mnie nie satysfakcjonuje

1. nie moge sobie skonwertować stringa nie znając jego kodowania
2. iconv() oraz mb_detect_encoding() w obu moich przypadkach pokazuja UTF-8 gdzie pierwsze to ISO
3. nie moge zamieniac krzakow na ich bez-ogonkowe odpowiedniki, musze wyswietlac polskie znaki
... tak wiec wszelkie proby obchodzenia wyswietlania tekstu z krzakami sa bezcelowe i nie satysfakcjonujace dla mojego problemu.

Dla poniższego przykładu:
$textA = '%B6pie';
$textB = '%C5%9Bci%C4%85ga';


zarówno iconv('UTF-8', 'UTF-8') jak i mb_detect_encoding() wskazują UTF-8, z czego pierwsze to ISO a drugie UTF. Jest to jedyny przypadek dla, którego nie mogę znaleźć sposobu na detekcje kodowania. W $textB to wcale nie musi być wyraz 'ściąga' może to być np. 'śącięłga' czyli dekodowane jak dla ISO, jedna reprezentacja %XX jeden znak, to jest ten problem - teoretycznie można by odróżnić to kodowanie właśnie w ten sposób sprawdzając czy w tekście występują podwójne %XX%XX charakterystyczne dla UTF, tylko co w przypadku gdy podamy wyraz "kość" tutaj 'ść' będzie reprezentowane np. przez %3D%F3
wiec teoretycznie %XX%XX jednak to nie jest UTF a ISO.

Tak wiec pisze raz jeszcze, nie chce zadnych metod na okolo, musze wyswietlic polskie znaki dla obu przypadkow. Chodzi o prawidlową detekcje kodowanie i poprawna zamiane. Tak aby:

$textA -> śpie
$textB -> ściąga

Pozdrawiam.
njq
Witam serdecznie.
Też mam problem z kodowaniem polskich znaków w linkach PHP 4.3.11.

Opiszę problem, może ktoś zna rozwiązanie, bo funkcje konwersji kodowania nie działają w tym przypadku.

Pliki PDF i DOC są tworzone w MS Windows (XP) i przesyłane przez FTP na serwer Apache.
Pliki mają być dostępne do pobrania i indeksowane przez wyszukiwarki, jako artykuły na stronie, zawierają w nazwach polskie znaki.

Użyłem funkcji
Kod
while (false !== ($file = readdir($handle)))

aby iterować po plikach w katalogu.
Gdy sprawdzam kodowanie zmiennej $file z nazwą pliku, dostaję ASCII:
Kod
echo (mb_detect_encoding($file));

więc aby je zmienić na UTF 8, którego używa moja strona, konwertuję za pomocą
Kod
$file_utf = mb_convert_encoding($file, "UTF-8", "ASCII");

ale po detekcji wiadć, że nadal jest kodowanie ASCII...

Jedyne, co udaje mi się osiągnąć, to zakodowanie url:
Kod
$file_url = rawurlencode($file_url);

jednak nie tylko linki są zakodowane, ale także nazwa pliku przy zapisywaniu go jest "zakrzaczona" w stylu "[...]/Za%BF%F3%B3%E6%20g%EA%9Cl%B9%20ja%9F%F1%20-%20_.pdf" jako "Zażółć gęśłą jaźń - _.pdf", ale link działa i można pobrać plik - jedyny problem to niezrozumiała nazwa.

Na dostępnym serwerze dopiero za półtora miesiąca może zostać przeprowadzone uaktualnienie PHP, więc będę bardzo wdzięczny za wskazówki, jak poprawnie wyświetlić polskie znaki w adresach linków i w treści linków, aby nazwa przy zapisie była poprawna.

Pozdrawiam serdecznie i dziękuję za pomoc. Przypomnę, że chodzi o PHP 4.3.11 i nie wchodzi w grę obejście (rezygnacja z polskich znaków), tylko rozwiązanie. Jeśli znajdę odpowiedź wcześniej, na pewno się podzielę smile.gif .
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.