<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                這是一份快速而骯臟的文檔,可幫助您編寫滿足自己的URL過濾需求的自定義URI過濾器。您為什么要編寫URI過濾器?如果您需要將您的用戶放入HTML中的URI,以神奇的方式將其更改為其他URI,這正是您所需要的! ## **創建class** 您創建的任何URI過濾器都是`HTMLPurifier_URIFilter`的子類。 ~~~ class HTMLPurifier_URIFilter_NameOfFilter extends HTMLPurifier_URIFilter { public $name = 'NameOfFilter'; public function prepare($config) {} public function filter(&$uri, $config, $context) {} } ~~~ `$name`用過濾器的名稱填寫變量,然后看一下這兩種方法。`prepare()`是一種初始化方法,在對HTML進行任何過濾之前,只能調用一次初始化方法。使用它可以執行任何昂貴的設置工作,只需完成一次。`filter()`是我們過濾器的內部結構:它獲取URI,并對其執行任何需要執行的操作。 如果您使用過HTML Purifier,則可以識別`$config`和`$context`參數。另一方面,`$uri`對于應用程序的這一部分來說是唯一的:它是一個`HTMLPurifier_URI`對象。因此,接口為: ~~~ class HTMLPurifier_URI { public $scheme, $userinfo, $host, $port, $path, $query, $fragment; public function HTMLPurifier_URI($scheme, $userinfo, $host, $port, $path, $query, $fragment); public function toString(); public function copy(); public function getSchemeObj($config, $context); public function validate($config, $context); } ~~~ 前三種方法很容易解釋:您有一個構造函數,一個序列化程序和一個克隆器。通常,在處理URI對象本身時不會使用它們。`getSchemeObj()`是一種專用方法,它返回`HTMLPurifier_URIScheme`與手頭特定URI相對應的對象。`validate()`對URI的內部組件執行通用驗證。再一次,您不必擔心這些:它們已經為您處理。 ## URI格式 作為URIFilter,我們對URI對象的成員變量感興趣。 **Scheme** 用于識別(并可能定位)資源(http,ftp,https)的協議 **Userinfo** 用戶信息,例如用戶名(bob) **Host** 服務器的域名或IP地址(example.com,127.0.0.1) **Port** 服務器的網絡端口號(80、12345) **Path** 標識資源的數據,可能是分層的(/path/to,ed@example.com) **Query** 資源要解釋的信息字符串(?q =搜索詞) **Fragment** 檢索后資源的附加信息(#bookmark) 因為URI是以這種形式顯示的,而不是`http://bob@example.com:8080/foo.php?q=string#hash`,它為我們省去了很多麻煩,每次我們想要過濾URI時都要解析它。作為記錄,上述URI具有以下組成部分: 方案http用戶信息鮑勃主辦example.com港口8080路徑/foo.php詢問q =字符串分段雜湊 **Scheme** http **Userinfo** bob **Host** example.com **Port** 8080 **Path** /foo.php **Query** q=string **Fragment** hash 請注意,查詢或片段中沒有問號或十進制字符:在解析過程中將其刪除。 有了這些信息,您就可以直接實現您的`filter()`方法。但是還有一件事... ## 返回值:布爾值,不是URI 您可能已經注意到URI是通過引用傳遞的。這意味著無論您對它進行什么更改,這些更改都會反映在被調用者擁有的URI對象中。**不要返回URI對象:這是不必要的,并且會導致錯誤。** 而是返回一個布爾值,如果過濾成功,則返回true;如果URI無法修復且需要刪除,則返回false。 假設我想編寫一個過濾器,該過濾器將具有自定義`image`方案的鏈接轉換為我們網站上相應的真實路徑: ~~~ class HTMLPurifier_URIFilter_TransformImageScheme extends HTMLPurifier_URIFilter { public $name = 'TransformImageScheme'; public function filter(&$uri, $config, $context) { if ($uri->scheme !== 'image') return true; $img_name = $uri->path; //覆蓋前面的URI對象 //HTMLPurifier_URI($scheme, $userinfo, $host, $port, $path, $query, $fragment) $uri = new HTMLPurifier_URI('http', null, null, null, '/img/' . $img_name . '.png', null, null); return true; } } ~~~ 注意我沒有`return $uri;`。該過濾器將`image:Foo`變為`/img/Foo.png`。 ## 激活過濾器 擁有過濾器是件好事,但是您需要告訴HTML Purifier使用它。幸運的是,這部分很簡單: ~~~ $uri = $config->getDefinition('URI'); $uri->addFilter(new HTMLPurifier_URIFilter_NameOfFilter(), $config); ~~~ ## 后置過濾器 還記得我們的TransformImageScheme過濾器嗎?這個過濾器在我們執行方案驗證之前就起作用了。否則,當發現沒有圖像方案時,該URI將被過濾掉。好吧,后過濾器是在特定于方案的驗證之后運行的,因此它是對URI進行批量后處理(包括壓縮)的理想選擇。要將URI指定為后過濾器,請將`$post`成員變量設置為TRUE。 ~~~ class HTMLPurifier_URIFilter_MyPostFilter extends HTMLPurifier_URIFilter { public $name = 'MyPostFilter'; public $post = true; // ... extra code here } ~~~ ## 例子 檢查[URIFilter](http://repo.or.cz/w/htmlpurifier.git?a=tree;hb=HEAD;f=library/HTMLPurifier/URIFilter)目錄以獲取更多實現示例,并查看[新的指令提案文檔](http://htmlpurifier.org/docs/proposal-new-directives.txt)以獲取有關可以作為過濾器實現的想法。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看