WordPress中的魔術引號,以及如何擺脫它們

    許多開發人員不知道的一件事是,WordPress自動將魔術引號添加到請求變量中。這意味著所有引號,反斜杠和空字節字符都將以反斜杠轉義。

    即使您在php.ini中禁用了魔術引號,WordPress仍將反引號應用于$ _GET,$ _ POST,$ _ COOKIE和其他超全局變量。如果您發現輸入數據中出現意外的斜線,這就是原因。

    啟用魔術引號的功能稱為wp_magic_quotes()。在WordPress完成加載插件后不久,它就在中聲明/wp-includes/load.php并調用了/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 );
    }

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

    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();

    現在您可能會想知道:為什么可以繼續按常規使用它們并僅stripslashes()在任何輸入數據上運行時,復制內置PHP變量會遇到所有麻煩?有以下幾個原因:

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

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

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

    強制中文/整個英文單詞自動換行與不換行 - CSS筆記

    2020-12-8 19:32:03

    國外主題

    Bonza - 建筑與室內WordPress主題

    2020-3-25 14:31:37

    ??
    Npcink上的部份代碼及教程來源于互聯網,僅供網友學習交流,若您喜歡本文可附上原文鏈接隨意轉載。
    無意侵害您的權益,請發送郵件至 1355471563#qq.com 或點擊右側 私信:Muze 反饋,我們將盡快處理。
    0 條回復 A文章作者 M管理員
      暫無討論,說說你的看法吧
    ?
    個人中心
    購物車
    優惠劵
    今日簽到
    有新私信 私信列表
    搜索
    主站蜘蛛池模板: 日韩精品一区二区三区老鸭窝| 亚洲国产精品成人一区| 一区二区高清在线| 久久精品一区二区三区资源网| 亚洲综合无码一区二区三区 | 色一情一乱一区二区三区啪啪高| 日韩精品人妻av一区二区三区| 91午夜精品亚洲一区二区三区| 免费国产在线精品一区| 亚洲国产AV一区二区三区四区| 亚洲无线码在线一区观看| 精品国产高清自在线一区二区三区| 国99精品无码一区二区三区| 日韩av片无码一区二区三区不卡| 亚洲国产精品一区二区第四页 | 在线播放国产一区二区三区| 国产成人精品久久一区二区三区av| 亚洲AV无码一区二区乱子仑| 久久久国产精品亚洲一区| 久久国产精品免费一区二区三区| 日本精品啪啪一区二区三区| 亚洲国产韩国一区二区| 少妇精品久久久一区二区三区| 91久久精一区二区三区大全| 国产一区高清视频| 亚洲AV网一区二区三区| 中文字幕一区日韩精品| 天堂va在线高清一区 | 好爽毛片一区二区三区四| 日本丰满少妇一区二区三区| 色婷婷香蕉在线一区二区| 亚洲视频一区网站| 久久精品亚洲一区二区三区浴池 | 国产av成人一区二区三区| 日韩一区二区三区精品| 精品一区精品二区| 精品国产香蕉伊思人在线在线亚洲一区二区| 日本一区二区三区不卡视频| 亚洲AV无码片一区二区三区| 国产av一区最新精品| 国产麻豆剧果冻传媒一区|