Saya mem-POST isi bidang formulir melalui AJAX ke skrip PHP dan menggunakan JavaScript ke escape(field_contents)
. Masalahnya adalah bahwa tanda tambah apa pun dihilangkan dan diganti dengan spasi. Bagaimana saya bisa 'menyandikan' tanda plus dengan aman dan kemudian 'mendekodekan' dengan tepat di sisi PHP?
98
Jawaban:
Gunakan
encodeURIComponent()
di JS dan PHP Anda harus menerima nilai yang benar.Catatan: Saat Anda mengakses
$_GET
,$_POST
atau$_REQUEST
dalam PHP, Anda mengambil nilai yang telah diterjemahkan.Contoh:
Di JS Anda:
Di server Anda:
Hanya permintaan HTTP mentah yang berisi data yang dikodekan url.
Untuk permintaan GET, Anda dapat mengambilnya dari
URI. $_SERVER['REQUEST_URI']
atau$_SERVER['QUERY_STRING']
. Untuk POST berkode url,file_get_contents('php://stdin')
NB:
decode()
hanya berfungsi untuk karakter yang dikodekan byte tunggal. Ini tidak akan berfungsi untuk rentang UTF-8 penuh.misalnya:
Catatan:
"%C4%80"
setara dengan:escape('\xc4\x80')
Yang merupakan urutan byte (
\xc4\x80
) yang diwakiliĀ
dalam UTF-8. Jadi jika Anda menggunakanencodeURIComponent()
sisi server Anda harus tahu bahwa itu menerima UTF-8. Jika tidak, PHP akan merusak pengkodean.sumber
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
atau<meta charset="UTF-8">
Anda juga dapat mengaturnya dalam PHP dengan HTTP Header Content-Type.header('Content-Type: text/html;charset=UTF-8');
NB: & rsqo; tidak memecahkan kode di browser (FF3.5).Dalam JavaScript coba:
dan dalam PHP:
sumber
urldecode
juga jauh karena PHP akan mendekodekannya secara otomatis sebelum diisi$_POST
.Nilai heksadesimal yang Anda cari adalah
%2B
Untuk mendapatkannya secara otomatis dalam PHP, jalankan string Anda
urlencode($stringVal)
. Dan kemudian jalankan dengan kasarurldecode($stringVal)
untuk mendapatkannya kembali.Jika Anda ingin JavaScript menanganinya, gunakanescape( str )
Edit
Setelah komentar @ bobince, saya membaca lebih banyak dan dia benar. Gunakan
encodeURIComponent(str)
dandecodeURIComponent(str)
. Escape tidak akan mengubah karakter, hanya melarikan diri dengan\
'ssumber
escape
(atauunescape
) di JavaScript; mereka tidak sama dengan pengkodean URL dan akan salah untuk + dan karakter Unicode non-ASCII. encodeURIComponent / decodeURIComponent hampir selalu seperti yang Anda inginkan.Untuk membuatnya lebih menarik dan semoga memungkinkan lebih sedikit menarik rambut untuk orang lain. Menggunakan python, kamus yang dibuat untuk perangkat yang dapat kita gunakan untuk konfigurasi curl.
Masalah:
{"timezone":"+5"} //throws an error " 5"
Larutan:
{"timezone":"%2B"+"5"} //Works
Jadi, singkatnya:
Terima kasih untuk posting ini!
sumber
Jika Anda harus melakukan curl di php, Anda harus menggunakan
urlencode()
dari PHP tetapi secara individual!Jika kamu melakukan
urlencode(strPOST)
, Anda akan membawa Anda masalah lain, Anda akan memiliki satu Item1 dan & akan berubah nilai% xx dan menjadi sebagai satu nilai, lihat di sini kembali!Contoh 1
Contoh 2
Contoh 1 adalah cara yang baik untuk menyiapkan string untuk POST di curl
Contoh 2 menunjukkan bahwa reseptor tidak akan melihat sama dan ampersand untuk membedakan keduanya nilai!
sumber
masalah saya adalah dengan aksen (á É ñ) dan tanda tambah (+) ketika saya mencoba menyimpan "contoh kode" javascript ke mysql:
solusi saya (bukan cara yang lebih baik, tetapi berhasil):
javascript:
fungsi untuk menyimpan:
fungsi di php:
sumber