[PHP] problem ze znakiem & w zmiennej


(Aminos) #1

Witam,

mam skrypt, który wysyła formularz do pliku PHP. Ten plik go odbiera w poprawny sposób, o ile w formularzu nie wystąpiła litera "ó". Ta bowiem zamieniana jest (inne pozostałe polskie znaki nie) na kod: ó PHP odbiera odpowiednie zmienne, jednak myli go znak "&" i uważa, że zaczyna się w tym miejscu nowa zmienna... tymczasem wcale tak nie jest. Np. wyraz "które" przesłany: "?tresc=które" - wartość zmiennej "tresc" u mnie to samo "kt".


#2

Prześlij metodą POST a nie GET :slight_smile:


(Oustish) #3

Jeżeli wysyłając przez POST nadal będziesz miał problem spróbuj po stronie klienta kodować tekst za pomocą base64, a w PHP na serwerze użyć base64_decode. Problem z polskimi znakami rozwiązany.

Jeżeli korzystasz z JavaScript możesz użyć tego: http://phpjs.org/functions/base64_encode/


(Aminos) #4

Właśnie używam POST’a… Ampersand jest mimo to nie do pokonania… A wiem, że przesyła się w porządku - zrobiłem nawet skrypt, który wyświetlił mi wszystkie zmienne - przesłałem POSTem: “?test=wartosc&&&&kolejna=cos” zwróciło mi to obecność dwóch zmiennych - “test” (o wartości "wartosc) i “kolejna” (wartość “cos”)…


#5

POST nie jest w pasku adresowym :slight_smile:


(Aminos) #6

Metoda dobra, tyle że pojawia się inny problem… W miejsce “+” automatycznie wskakuje mi spacja #-o


(Pablo_Wawa) #7

Wartości parametrów przekazywanych zarówno przez POST jak i GET (u Ciebie) należy zakodować funkcją urlencode albo encodeURIComponent (to są funkcje JavaScript).


(Aminos) #8

Dzięki, jesteś genialny. =D>

Kompletnie zapomniałem o takim potraktowaniu zmiennej… Bawię się trochę ajax’em… i zapytania faktycznie wysyłam POST’em, jednak tworzę je nie poprzez tradycyjne formularze, ale w JavaScripcie, przez co kod do pewnego momentu faktycznie przypomina GET’a… :stuck_out_tongue:

Już wszystko działa, dzięki wielkie.


(Pablo_Wawa) #9

Ja od lat stosuję funkcję encodeURIComponent (w tutorialach używają najczęściej urlencode, ale ja uważam, że powinno się używać właśnie encodeURIComponent) do zakodowania przesyłanych danych formularza (nazwy i wartości zmiennych) - po stronie serwera (PHP) nic z tym już nie trzeba robić. Dodatkowo strony koduję w UTF-8 i tylko czasami w PHP muszę pamiętać o pewnych sprawach związanych z “dziwnym” wsparciem UTF-8 właśnie, a tak to komunikacja między JS a PHP działa zupełnie bezproblemowo (na co dowodem jest np. ten projekt: http://programistrz.pl/projekty/wikipedia/, który intensywnie przesyła dane, w których są używane nie tylko polskie ogonki, jak i inne znaki międzynarodowe).