Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [html/form/?]Formularz na stronie UTF-8 do strony ISO-8859-2
barat
post 11.02.2009, 08:58:36
Post #1





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

Ostrzeżenie: (0%)
-----


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?
Powód edycji: Poprawiłem tytuł (ociu)
Go to the top of the page
+Quote Post
revyag
post 11.02.2009, 10:27:27
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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


--------------------
-------------

------
Go to the top of the page
+Quote Post
barat
post 11.02.2009, 12:35:12
Post #3





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

Ostrzeżenie: (0%)
-----


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ć ?
Go to the top of the page
+Quote Post
revyag
post 11.02.2009, 15:33:38
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

Ostrzeżenie: (0%)
-----


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


--------------------
-------------

------
Go to the top of the page
+Quote Post
barat
post 11.02.2009, 18:52:02
Post #5





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
hwao
post 16.02.2009, 01:08:28
Post #6


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




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.
Go to the top of the page
+Quote Post
adamusa
post 1.06.2011, 15:13:04
Post #7





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 1.06.2011

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.05.2025 - 09:44