dede文章增長HTML自定義字段字符被過濾問題

     在dedecms後臺頻道模型增長自定義字段,通常HTML文字編輯器能解決用戶編輯問題,固然還包括純單行或多行文本編輯。但發現dedecms會自動過濾掉某些敏感的字符,好比style樣式,百度地圖js調用問題。下面主要圍繞着兩個問題分享一下我的的經驗。javascript

      創建自定義字段能夠參考《dedecms如何添加自定義字段與前臺調用內容》php

HTML文字樣式編輯亂碼問題

       dedecms默認的文本編輯器雖然不太美觀,可是最簡潔,我更換過百度神器:ueditor,功能強大,知足了絕大用戶的編輯須要,可是替換的時候還須要二次開發,好比上傳圖集問題,點不了本地上傳的按鈕等,因此仍是選擇用默認的文本編輯器。css

       自定義的HTML編輯器功能強大,可是仍是不如默認模型的文本編輯器,爲了數據安全,好比用在評論的地方,會過濾掉某些敏感詞,或者某些非法竊取數據的代碼。dede使用include\helpers\filter.helper.php進行過濾,被過濾的能夠找到以下字段:html

       $ra1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');java

       根據實際須要刪除style便可,就能夠解決HTML文本編輯器的樣式亂碼問題。express

百度地圖js失效問題

       百度地圖生成器地址(http://api.map.baidu.com/lbsapi/createmap/index.html),設置完了以後點擊複製代碼,多餘的代碼能夠不要,只須要複製  <script type="text/javascript"> 到 </script >之間的代碼便可,其餘代碼,根據實際狀況直接寫在內容頁模板裏面,這裏須要注意的是百度須要提供開發密鑰,站長們去申請就行了,直接寫在內容模板裏。把顯示地圖的區域代碼放在適合的位置,代碼以下:api

    <!--百度地圖容器,樣式根據實際狀況修改,id默認爲map-->
   <div style="width:700px;height:550px;border:#ccc solid 1px;font-size:12px" id="map"></div>安全

       接下來就把js部分所有複製粘貼到自定義的文本框內,若是怕字符數限制,能夠本身調大點。app

百度地圖插入js

      把工做作完了以後,在前臺能看到一切正常,會發現再次進入編輯的時候,某些字符會被過濾,好比:title,script等,變成sc<x>ript等亂七八糟的字符,讓地圖顯示失效。一樣按照上述,編輯器

       $ra1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');

      刪除title、script、javascript。可是第二次進去編輯的時候,前臺地圖仍然失效,經過文本對比工具發現,還有「,」逗號也被過濾了。在朋友的幫助下,仍是圍繞include\helpers\filter.helper.php這個文件下功夫。

       在大概68行

       $val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);

       改爲

       $val = preg_replace('/([\x00-\x08|\x0b-\x0c|\x0e-\x19])/', '', $val);

      問題獲得解決。但不知道是否涉及到安全問題,若是不刪除上述這些字段,還有其餘實現方法。其實地圖亂碼應該修改68行的代碼就足夠了,在include\helpers\filter.helper.php發現如下這個字段,把它刪除就能解決樣式亂碼問題。dede禁止會員投稿添加css樣式

相關文章
相關標籤/搜索