Wysyłam zawartość pola formularza przez AJAX do skryptu PHP i używając JavaScript do escape(field_contents)
. Problem polega na tym, że wszelkie znaki plus są usuwane i zastępowane spacjami. Jak bezpiecznie „zakodować” znak plus, a następnie odpowiednio go „zdekodować” po stronie PHP?
98
Odpowiedzi:
Używając
encodeURIComponent()
w JS i PHP powinieneś otrzymać prawidłowe wartości.Uwaga: Po uzyskaniu dostępu
$_GET
,$_POST
lub$_REQUEST
w PHP, jesteś pobierania wartości, które zostały już odkodowane.Przykład:
W twoim JS:
Na twoim serwerze:
Tylko surowe żądanie HTTP zawiera dane zakodowane w postaci adresu URL.
W przypadku żądania GET możesz pobrać to z
URI. $_SERVER['REQUEST_URI']
lub$_SERVER['QUERY_STRING']
. W przypadku POST z kodem urlencodfile_get_contents('php://stdin')
Uwaga:
decode()
działa tylko dla znaków zakodowanych jednobajtowo. Nie będzie działać dla pełnego zakresu UTF-8.na przykład:
Uwaga:
"%C4%80"
jest równoważne z:escape('\xc4\x80')
Jaka jest sekwencja bajtów (
\xc4\x80
), która reprezentujeĀ
w UTF-8. Więc jeśli używaszencodeURIComponent()
swojego serwera, musisz wiedzieć, że odbiera UTF-8. W przeciwnym razie PHP zmieni kodowanie.źródło
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
lub<meta charset="UTF-8">
możesz również ustawić go w PHP za pomocą nagłówka HTTP Content-Type.header('Content-Type: text/html;charset=UTF-8');
PS: & rsqo; nie dekoduje w przeglądarce (FF3.5).W JavaScript spróbuj:
aw PHP:
źródło
urldecode
jest również daleko, ponieważ PHP zdekoduje go automatycznie przed wypełnieniem$_POST
.Poszukiwana wartość szesnastkowa to
%2B
Aby uzyskać to automatycznie w PHP, uruchom ciąg
urlencode($stringVal)
. A potem uruchom to dobrzeurldecode($stringVal)
aby go odzyskać.Jeśli chcesz, aby JavaScript obsługiwał to, użyjescape( str )
Edytować
Po komentarzu @ bobince'a przeczytałem więcej i on ma rację. Użyj
encodeURIComponent(str)
idecodeURIComponent(str)
. Escape nie konwertuje znaków, a jedynie ucieka je za pomocą\
'sźródło
escape
(lubunescape
) w JavaScript; nie są one tym samym, co kodowanie adresów URL i będą błędne dla znaków + i wszystkich znaków Unicode spoza ASCII. encodeURIComponent / decodeURIComponent jest prawie zawsze tym, czego chcesz.Aby uczynić go bardziej interesującym i miejmy nadzieję, umożliwić mniejsze wyrywanie włosów komuś innemu. Używając Pythona, wbudowanego słownika dla urządzenia, które możemy skonfigurować za pomocą curl.
Problem:
{"timezone":"+5"} //throws an error " 5"
Rozwiązanie:
{"timezone":"%2B"+"5"} //Works
A więc w skrócie:
Dzięki temu wpisowi!
źródło
Jeśli musisz zrobić curl w php, powinieneś używać
urlencode()
z PHP, ale indywidualnie!Jeśli to zrobisz
urlencode(strPOST)
, przyniesie ci kolejny problem, będziesz mieć jeden Item1 i & zmienisz wartość% xx i będzie to jedna wartość, zobacz tutaj wynik!Przykład 1
Przykład 2
Przykład 1 to dobry sposób na przygotowanie ciągu do POST w curl
Przykład 2 pokazuje, że receptor nie zobaczy równości i znaku ampersand, aby rozróżnić obie wartości!
źródło
mój problem dotyczył akcentów (á É ñ) i znaku plus (+), kiedy próbuję zapisać „przykłady kodu” javascript w mysql:
moje rozwiązanie (nie lepsze, ale działa):
javascript:
funkcja do zapisania:
funkcja w php:
źródło