Ben bir veritabanına giriş alanından veri depolamak istiyorum. Kullanıcı bazı ters eğik çizgi veya tırnak girmeye karar Ancak, ben mahvoldum.
Ben istemci tarafında aşağıdaki kodu kullanıyorum. MyString değeri bir giriş alanından okuma aslında.
mydata = Ext.encode({
mystring : "foo '\' bar ' \0x00\""
});
Ext.Ajax.request({
url: '/test.php',
params: { data: mydata }
});
Sunucu üzerinde, print_r($_POST)
bana verir
array(
['data'] => '{"mystring":"foo '' bar ' \u0000x00\""}'
)
Yani, ben foo sonra ters eğik kaybetti, ve \0x
\u00
oldu, ve
var_dump(json_decode($_POST['data'])
başarısız olur ve iadeler
NULL
Kullanıcı tırnak kullandığında başka bir durumda, ben olsun
mydata = Ext.encode({
{"mystring":"foo '\"' bar '"}
});
ve ben $_POST
ile PHP tarafında sonuna kadar
array(
['data'] => '{"mystring":"foo '"' bar '"}'
)
çok hangi json_decode için geçerli girişi () 'dir.
Ben tam anlamıyla kullanıcı girişi istiyorum. Ben benim veritabanı sarıcı INSERT komutundan önce kaçan şeyler dikkat izin istiyorum, ama nasıl potansiyel olarak güvenli benim PHP komut dosyası bölü bölü, çift ve tek tırnak herhangi bir miktarda içeren, keyfi dizelerini göndermek ve başarılı bir json_decode ?
Zaten base64 kodlaması düşündüm, ama o daha çok bir seçenek değildir.
Belgeler için http://dev.sencha.com/deploy/dev/docs/?class=Ext.util.JSON bakın.
Edit:
Veri, Ext.grid.EditorGridPanel MyGrid en deposundan okunmaktadır. Bütün script yaklaşık 2.500 LoC vardır, bu yüzden ben sadece burada bir alıntıyı gönderebilirsiniz. Ben de bütün şeyler daha okunabilir hale getirmek için bazı değişken isimlerini değiştirdi.
var modRec = myGrid.getStore().getModifiedRecords();
var data = new Array();
var len = modRec.length - 1;
for (f = len; f > -1; --f) {
var a = {};
var changes = modRec[f].getChanges();
for (var name in changes) {
if ('function' == typeof changes[name]) {
continue;
}
a[name] = changes[name];
}
data.push(a);
}
Ext.Ajax.request({
url: '/test.php',
params: { Ext.encode(data) }
});
Sonuç olarak yukarıdaki ile aynıdır. Bir kullanıcı bir Ext.form.TextField olan grid hücre editörü, editör alana bir çift tırnak girdiğinde, dize kodlanmış ve doğru çözümlenmiş değildir.