Discuz!開發之字串處理函式dhtmlspecialchars介紹
阿新 • • 發佈:2019-02-18
dhtmlspecialchars定義於Discuz!核心函式庫:\source\function\function_core.php,程式碼邏輯如下:
function dhtmlspecialchars($string, $flags = null) { if(is_array($string)) { foreach($string as $key => $val) { $string[$key] = dhtmlspecialchars($val, $flags); } } else { if($flags === null) { $string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string); if(strpos($string, '&#') !== false) { $string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $string); } } else { if(PHP_VERSION < '5.4.0') { $string = htmlspecialchars($string, $flags); } else { if(strtolower(CHARSET) == 'utf-8') { $charset = 'UTF-8'; } else { $charset = 'ISO-8859-1'; } $string = htmlspecialchars($string, $flags, $charset); } } } return $string; }
dhtmlspecialchars實際上是對PHP內建函式htmlspecialchars的二次封裝和補充,使得不僅可以處理字串還可以遞迴處理陣列;
它的作用是是可以把一個數組或字串中的字元轉化為html實體,可以防止頁面的跨站問題,那麼我們看到他的轉換就是將‘&’,‘”’,‘<’,‘>’轉化為'&', '"', '<', '>'。但是這裡面會有一些問題,如‘& #x5FD7;’這樣的16進位制的html字元,為了防止這樣的字元被錯誤轉譯,所以又使用了正則進行匹配,把這樣的字元又轉換回來;一般使用在內容輸出到介面之前處理要輸出的內容;