Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [html/form/?]Formularz na stronie UTF-8 do strony ISO-8859-2
Forum PHP.pl > Forum > Po stronie przeglądarki
barat
Witam.

Mam mały problem, który zapewne ma jakieś banalnie proste rozwiązanie (gorzej, jeśli nie).
Otóż załóżmy, że mam formularz, który znajduje się na stronie kodowanej w standardzie UTF-8.
Wszystko pięknie, ładnie ... ale ... ów formularz przekierowuje do innej strony kodowanej w standardzie ISO-8859-2.
Oczywiście gdy wpisze się dane, kliknie szukaj, otworzona zostanie strona docelowa a na niej ... "nie znaleziono szukanego wyrazu" ... powodem są polskie znaczki, które wysłane ze strony UTF na stronie ISO przyjmują fantazyjne kształty nijak nie przypominające naszych rodzimych :/

Po rekonesansie w google znalazłem częściowe rozwiązanie - accept-charset="ISO-8859-2". Elegancko ... prosto ... szybko ... NIEKOMPATYBILNE Z IE :/ Normalnie zespół M$ od IE wypuszcza kaszanę za kaszaną. I to nie tylko IE6 ... sztuczka w IE7 też nie działa ...

Czyli przykładowy formularz:

  1. <form accept-charset="ISO-8859-2" action="http://www.strona8859-2.pl/form.php" method="post" target="_blank">
  2. miasto:
  3. <input name="miasto" />
  4. <input type="submit" value="Szukaj" id="submit" />
  5. </form>


Na FF i Operze zadziała bez problemu. Po wpisaniu Poznań, Wrocław ... na stronie docelowej zostanie wykonane poprawne zapytanie. Jednak pod IE krzaki jak były tak są.

Jest jakiś elegancji sposób na uporanie się z tym problemem?
revyag
A dlaczego nie użyjesz takiego samego kodowania na obydwu stronach ?
Możesz konwertować znaczki po stronie serwera: iconv" title="Zobacz w manualu PHP" target="_manual
barat
Powiedzmy, że na stronie docelowej nie mogę zmienić (załóżmy, że nie mam tam żadnych uprawnień), a na swojej chcę mieć UTF-8 smile.gif

iconv byłby dobry, gdyby można było na stronie docelowej przekonwertować to co się otrzymało ... ale jak przy formularzu wysyłanym ją zastosować ?
revyag
Dwa rozwiązania.

1. Request Ajaxowy
2. Curl

W obydwu przypadkach zanim wykonasz żądanie konwertujesz dane używając iconv. Potem je przesyłasz. Nie ma sensu klepać tu przykładów gdyż znalezienie takowych na google zajmuje 20sek, ok do minuty przy słabszym łączu smile.gif
barat
Czyli nie ma aż tak prosto ... pozostaje curl lub ewentualnie na skrypcie docelowym sprawdzić skąd pochodzi zapytanie i jak ze strony nr 1 to ma być użyty iconv smile.gif No cóż - dzięki za pomysły smile.gif
hwao
Jest parę rozwiązań.


Osadź formularz w iframe (taki na wielkość formularza) i ustaw tam kodowanie takie jak potrzebujesz, a na reszcie strony bez problemu masz UTF8.

Kolejne rozwiązanie:
Jeżeli to jedyny formularz na stronie i nie będzie się gryzło nic w serwisie (brak innych formów, ewentualnie pozbyć się ich) łapiesz tylko tą jedną stronę przy pomocy ob_start" title="Zobacz w manualu PHP" target="_manual() zamieniasz kodowanie na całej stronie z UTF na ISO i head charset na ISO, wtedy tylko ta jedna stronka jest na ISO i formularz może wysłać normalnie dane.
adamusa
witam,

też miałem ten problem, ja dodałem dodatkowy skrypt między starą, a nową stronę

nowa(kodowanie utf8)->dodatkowy_skrypt.php->stara(kodowanie iso)

a w dodatkowy_skrypt.php (dla GET)

$newUrl = 'http://staryserwis.pl?';

foreach(array_keys($_GET) as $key)
$newUrl .= $key."=".urlencode(iconv('UTF-8', 'ISO-8859-2',$_GET[$key])).'&';


header( 'Location: '.$newUrl) ;?>

Pozdrawiam,
Adam

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.