我對serialize()
和unserialize()
有一些問題。serialize()和unserialize()混淆和轉義
我正在爲Wordpress寫一個函數,該函數實際上是一個設置頁面,我試圖使用兩個輸入字段導出和導入設置數組。
該代碼(和頁面)有點長,所以我發佈它HERE ON PASTEBIN,這有點舒服。
雖然我有這個問題,但wordpress會使用設置API將選項(或設置)保存爲序列化數組。
功能我已經可以成功的展會,如選擇:
a:10:{s:24:"brsa_copyright_meta_text";s:0:"";s:25:"brsa_remove_menu_css_list";s:0:"";s:19:"brsa_remove_submenu";s:0:"";s:21:"brsa_remove_menu_list";s:0:"";s:15:"brsa_footer_txt";s:0:"";s:22:"brsa_dash_wdgt_content";s:0:"";s:36:"brsa_add_custom_login_message_string";s:0:"";s:21:"brsa_login_url_string";s:0:"";s:21:"brsa_login_alt_string";s:0:"";s:14:"brsa_login_img";s:0:"";}
這是確定。它是序列化的,但是當我嘗試將其插入到數據庫(或通過按導入按鈕在其他字段上顯示它)時,我認爲它實際上是escaped
,並且在任何情況下它都不會以序列化的形式插入數據庫,但作爲一個字符串..
a:10:{s:24:\"brsa_copyright_meta_text\";s:0:\"\";s:25:\"brsa_remove_menu_css_list\";s:0:\"\";s:19:\"brsa_remove_submenu\";s:0:\"\";s:21:\"brsa_remove_menu_list\";s:0:\"\";s:15:\"brsa_footer_txt\";s:0:\"\";s:22:\"brsa_dash_wdgt_content\";s:0:\"\";s:36:\"brsa_add_custom_login_message_string\";s:0:\"\";s:21:\"brsa_login_url_string\";s:0:\"\";s:21:\"brsa_login_alt_string\";s:0:\"\";s:14:\"brsa_login_img\";s:0:\"\";}
..使整個代碼無法使用。 代碼的相對部分是這樣的:
$my_options = get_option('o99_brsa_settings');
$currentsettings = "";
if (isset($_POST['import']) && trim($_POST['exccc']) != "") {
$currentsettings = $_POST['exccc'];
update_option('o99_brsa_settings', serialize($currentsettings));
} elseif (isset($my_options) && ($my_options != "")) {
if ($o99_brsa_options['brsa_keep_settings_exp'] !='') {
$currentsettings = $o99_brsa_options['brsa_keep_settings_exp'];
} else {
$currentsettings = serialize($my_options);
}
}
雖然我不相信-- whole code --應,以瞭解它如何工作可以看出..
除FAC認爲這是行不通的,我不太清楚什麼是問題,但首先我想知道爲什麼值是/escaped/
以及如何防止它?
任何其他幫助,也將不勝感激..
您的服務器可能啓用了'magic_quotes'。要求您的管理員將其禁用。如果你需要'magic_quotes',你就會做錯了,這種情況下的一個解決方法就是''反轉你的輸入,這個輸入可以解除'magic_quotes'的轉換。 – Halcyon 2013-04-08 16:29:44
向我們展示'update_option'的實現,那麼你可能會有太多的轉義。 – Halcyon 2013-04-08 16:31:58
@Frits van Campen - 但不會'stripslashes'也可能會損害內部信息,可能會斜槓? – 2013-04-08 16:32:01