WordPress中的魔術(shù)引號(hào),以及如何擺脫它們

    許多開發(fā)人員不知道的一件事是,WordPress自動(dòng)將魔術(shù)引號(hào)添加到請(qǐng)求變量中。這意味著所有引號(hào),反斜杠和空字節(jié)字符都將以反斜杠轉(zhuǎn)義。

    即使您在php.ini中禁用了魔術(shù)引號(hào),WordPress仍將反引號(hào)應(yīng)用于$ _GET,$ _ POST,$ _ COOKIE和其他超全局變量。如果您發(fā)現(xiàn)輸入數(shù)據(jù)中出現(xiàn)意外的斜線,這就是原因。

    啟用魔術(shù)引號(hào)的功能稱為wp_magic_quotes()。在WordPress完成加載插件后不久,它就在中聲明/wp-includes/load.php并調(diào)用了/wp-settings.php

    /**
     * Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.
     *
     * Also forces $_REQUEST to be $_GET + $_POST. If $_SERVER, $_COOKIE,
     * or $_ENV are needed, use those superglobals directly.
     *
     * @access private
     * @since 3.0.0
     */
    function wp_magic_quotes() {
        // If already slashed, strip.
        if ( get_magic_quotes_gpc() ) {
            $_GET    = stripslashes_deep( $_GET    );
            $_POST   = stripslashes_deep( $_POST   );
            $_COOKIE = stripslashes_deep( $_COOKIE );
        }
     
        // Escape with wpdb.
        $_GET    = add_magic_quotes( $_GET    );
        $_POST   = add_magic_quotes( $_POST   );
        $_COOKIE = add_magic_quotes( $_COOKIE );
        $_SERVER = add_magic_quotes( $_SERVER );
     
        // Force REQUEST to be GET + POST.
        $_REQUEST = array_merge( $_GET, $_POST );
    }

    那么,如何訪問干凈,未轉(zhuǎn)義的數(shù)據(jù)呢?不幸的是,不編輯核心文件就不可能完全關(guān)閉WordPress魔術(shù)引號(hào)。但是,由于WordPress?所有插件加載添加了引號(hào),因此您可以在插件加載時(shí)(或在“ plugins_loaded”操作中)簡單地獲取未修改的變量,并存儲(chǔ)本地副本供自己使用。這是一個(gè)例子:

    class MyExamplePlugin {
        //Local copies of the PHP superglobals.
        private $get;
        private $post;
        private $cookie;
     
        public function __construct() {
            /* ... Other plugin code ... */
     
            add_action('plugins_loaded', array($this, 'captureRequestVars'));
        }
     
        public function captureRequestVars() {
            //Store the original GET and POST data + cookies.
            $this->get = $_GET;
            $this->post = $_POST;
            $this->cookie = $_COOKIE;
     
            //If magic quotes are actually enabled in PHP,
            //we'll need to remove the slashes.
            if ( get_magic_quotes_gpc() ) {
                $this->get    = stripslashes_deep($this->get);
                $this->post   = stripslashes_deep($this->post);
                $this->cookie = stripslashes_deep($this->cookie);
            }
        }
     
        public function doSomethingWithInput() {
            /* ... */
     
            //Use the internal copy of $_GET.
            $something = $this->get['something'];
     
            /* ... */
        }
    }
     
    $myExamplePlugin = new MyExamplePlugin();

    現(xiàn)在您可能會(huì)想知道:為什么可以繼續(xù)按常規(guī)使用它們并僅stripslashes()在任何輸入數(shù)據(jù)上運(yùn)行時(shí),復(fù)制內(nèi)置PHP變量會(huì)遇到所有麻煩?有以下幾個(gè)原因:

    • 遲早,您將忘記給stripslashes()某個(gè)地方打電話。這可能導(dǎo)致難以發(fā)現(xiàn)的錯(cuò)誤。
    • 代碼重復(fù)。當(dāng)您可以將反斜杠代碼放在一個(gè)地方時(shí),為什么還要將其擴(kuò)展到整個(gè)代碼庫中呢?
    • 前向兼容性。如果WordPress團(tuán)隊(duì)決定停止仿效此已棄用的PHP錯(cuò)誤功能,則不加選擇地應(yīng)用于stripslashes()所有輸入數(shù)據(jù)的插件和主題將突然中斷。

    就是說,我不會(huì)指望WordPress很快就會(huì)放棄這一“功能”。這是向后兼容的問題,有時(shí)WordPress似乎認(rèn)為兼容性比鼓勵(lì)良好的編程習(xí)慣更重要。

    來源于: https://w-shadow.com/blog/2012/11/13/wordpress-magic-quotes/

    給TA贊賞
    共{{data.count}}人
    人已贊賞
    ??
    Npcink上的部份代碼及教程來源于互聯(lián)網(wǎng),僅供網(wǎng)友學(xué)習(xí)交流,若您喜歡本文可附上原文鏈接隨意轉(zhuǎn)載。
    無意侵害您的權(quán)益,請(qǐng)發(fā)送郵件至 1355471563#qq.com 或點(diǎn)擊右側(cè) 私信:Muze 反饋,我們將盡快處理。
    ?
    購物車
    優(yōu)惠劵
    搜索
    主站蜘蛛池模板: 无码一区二区三区视频| 色欲精品国产一区二区三区AV| 国产成人一区二区三区在线观看| 国产精品伦一区二区三级视频| 日韩精品一区二区三区老鸦窝| 熟女精品视频一区二区三区| 精品无码人妻一区二区三区不卡 | 一区二区三区人妻无码 | 国产A∨国片精品一区二区 | 亚洲视频在线观看一区| 中文字幕亚洲一区| 亚洲AⅤ视频一区二区三区| 在线观看一区二区精品视频| 一区二区三区视频| 伊人久久精品一区二区三区| 亚洲一区在线视频| 国产精品一区二区久久精品| 日韩好片一区二区在线看| 国产亚洲一区二区三区在线| 天堂Aⅴ无码一区二区三区| 中文字幕精品一区| 久草新视频一区二区三区| 中文字幕一区二区人妻| 国产另类ts人妖一区二区三区| 一区二区三区日本电影| 国产福利一区二区三区| 色一情一乱一伦一区二区三区| 亚洲电影一区二区三区| 一区二区三区在线| 免费无码VA一区二区三区| 后入内射国产一区二区| tom影院亚洲国产一区二区| 日韩经典精品无码一区| 亚洲AV无码一区二区三区久久精品| 国产韩国精品一区二区三区 | 在线观看国产一区亚洲bd| 日韩精品一区二区三区色欲AV| 成人在线视频一区| 国产情侣一区二区| 国产香蕉一区二区在线网站| 亚洲一区二区三区影院|