Apa cara terbaik untuk menentukan apakah string adalah hasil dari serialize()
fungsi?
sumber
Apa cara terbaik untuk menentukan apakah string adalah hasil dari serialize()
fungsi?
Saya akan mengatakan, cobalah unserialize
;-)
Mengutip manual:
Jika string yang diteruskan tidak dapat dibatalkan, FALSE dikembalikan dan E_NOTICE dikeluarkan.
Jadi, Anda harus memeriksa apakah nilai pengembaliannya false
atau tidak (dengan ===
atau !==
, untuk memastikan tidak memiliki masalah dengan 0
atau null
atau apa pun yang setara dengan false
, saya katakan) .
Berhati-hatilah dengan pemberitahuan: Anda mungkin ingin / perlu menggunakan operator @ .
Misalnya :
$str = 'hjkl';
$data = @unserialize($str);
if ($data !== false) {
echo "ok";
} else {
echo "not ok";
}
Akan membuat Anda:
not ok
EDIT: Oh, dan seperti yang dikatakan @Peter (terima kasih padanya!), Anda mungkin akan mendapat masalah jika Anda mencoba untuk membatalkan registrasi representasi boolean false :-(
Jadi, memeriksa bahwa string serial Anda tidak sama dengan " b:0;
" mungkin membantu juga; sesuatu seperti ini harus melakukan trik, saya kira:
$data = @unserialize($str);
if ($str === 'b:0;' || $data !== false) {
echo "ok";
} else {
echo "not ok";
}
menguji kasus khusus itu sebelum mencoba unserialize akan menjadi optimasi - tetapi mungkin tidak berguna, jika Anda tidak sering memiliki nilai serial yang salah.
Saya tidak menulis kode ini, sebenarnya dari WordPress. Kupikir aku akan memasukkannya untuk siapa pun yang tertarik, itu mungkin berlebihan tetapi bekerja :)
sumber
^([adObis]:|N;)
Mengoptimalkan respons Pascal MARTIN
sumber
Jika $ string adalah
false
nilai serial , yaitu fungsi$string = 'b:0;'
SoN9ne kembalifalse
, itu salahjadi fungsinya akan
sumber
In case the passed string is not unserializeable, FALSE is returned and E_NOTICE is issued.
Kami tidak dapat menangkap kesalahan E_NOTICE karena itu bukan pengecualian.Terlepas dari jawaban Pascal MARTIN yang luar biasa, saya ingin tahu apakah Anda dapat mendekati ini dengan cara lain, jadi saya melakukan ini hanya sebagai latihan mental
Dan itu benar-benar berfungsi. Satu-satunya peringatan adalah bahwa kemungkinan akan rusak jika Anda memiliki penangan kesalahan terdaftar karena cara $ php_errormsg bekerja .
sumber
$a
dan deserializing$b
, yang bukan desain aplikasi praktis.Menangani kasus dengan benar
serialize(false)
. :)sumber
membangun fungsi
sumber
a:
(ataub:
dll) ada di suatu tempat di dalam nilai $, bukan di awal. Dan di^
sini bukan berarti awal dari sebuah string. Benar-benar menyesatkan.Ada solusi WordPress: (detail ada di sini)
sumber
sumber
Ini berfungsi baik untuk saya
sumber
Saya lebih suka melakukannya seperti itu:
sumber