2013-04-08 34 views
0

我對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/以及如何防止它?

任何其他幫助,也將不勝感激..

+1

您的服務器可能啓用了'magic_quotes'。要求您的管理員將其禁用。如果你需要'magic_quotes',你就會做錯了,這種情況下的一個解決方法就是''反轉你的輸入,這個輸入可以解除'magic_quotes'的轉換。 – Halcyon 2013-04-08 16:29:44

+0

向我們展示'update_option'的實現,那麼你可能會有太多的轉義。 – Halcyon 2013-04-08 16:31:58

+0

@Frits van Campen - 但不會'stripslashes'也可能會損害內部信息,可能會斜槓? – 2013-04-08 16:32:01

回答

0

您的服務器可能已經啓用magic_quotes。要求您的管理員將其禁用。

+0

現在,繼此之後 - 有沒有辦法檢查'magic_quotes'是否在運行時啓用? – 2013-04-08 16:49:43

+0

是的。 http://php.net/manual/en/function.get-magic-quotes-gpc.php – Halcyon 2013-04-08 16:50:31