八小時模組開發

13. XOOPS文字過濾(30分鐘)

一、 寫入時(盡可能忠實的存入)

  1. 存入時,若有特殊符號,如:「\」、「"」、「'」,若沒有處理,那麼可能無法存入。
  2. XOOPS的文字處理工具:
    $myts =& MyTextSanitizer::getInstance();
  3. $myts->addSlashes(文字):替特殊符號加入脫逸斜線,以順利存入資料庫中。若PHP的magic_quotes_gpc設定為on,那麼是不會再加上斜線的。例如:
    $eng=$myts->addSlashes($_POST['eng']);
    $cht=$myts->addSlashes($_POST['cht']);
  4. $myts->censorString(文字):用來過濾不雅字元,需搭配XOOPS後台的「偏好設定→系統設定→敏感字詞檢查」設定來使用。

二、 讀出文章(過濾掉危險字符)

  1. 目的:過濾一些可能會危害網站的語法。
  2. 呈現大量文字:
    $myts->displayTarea($text, $html=0, $smiley=1, $xcode=1, $image=1, $br=1) 
    • (1)  「$text」就是要被處理之後呈現的文字。
    • (2)  「$html」是否允許使用HTML語法,用所見即所得編輯器製作出來的請填1。
    • (3)  「$smiley」是否轉換表情圖,預設為1,會將:) 這類的符號轉換為圖片。
    • (4)  「$xcode」是否使用BBCode,如:[color=red]文字[/color]。
    • (5)  「$image」是否允許在文字中使用圖片。若為0,圖片會以連結來顯示。
    • (6)  「$br」是否要將「\n」換行符轉換為<br />,用所見即所得編輯器者請設為0。
  3. 呈現一般文字:
    $myts->htmlSpecialChars($text, $quote_style=ENT_QUOTES, $charset= 'ISO-8859-1', $double_encode=true) 
    • (1)  「$text」就是要被處理之後呈現的文字。
    • (2)  「$quote_style」要處理的引號模式,「ENT_COMPAT」僅處理雙引號;「ENT_QUOTES」處理雙引號和單引號(預設);「ENT_NOQUOTES」不對任何引號進行處理。
    • (3)  「$charset」轉換的預設編碼,通常使用預設值即可。
    • (4)  「$double_encode」只有PHP 5.2.3之後才有效。若設為false,則不對現有的HTML實體做編碼的動作。
  4. 例如:
      $myts =& MyTextSanitizer::getInstance();
      while(list($sn,$eng,$cht)=$xoopsDB->fetchRow($result)){
        $dict[$sn]['eng']=$myts->htmlSpecialChars($eng);
        $dict[$sn]['cht']=$myts->htmlSpecialChars($cht);
      }

四、自己測試一下

輸入以下的內容到您的表單中,若是有跳出訊息或是看到影片,那就表示您的安全做得不夠好。

<script>alert('我要入侵了')</script>
<iframe width="420" height="315" src="http://www.youtube.com/embed/DC766xWLldM" frameborder="0" allowfullscreen></iframe>