php Regex含義
$string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1',
str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string));
逸出字元串中的特殊字元
'/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', 這部分含義?
------解決方案--------------------
拆開理解就是了
然後把&#nnnnn 或 &#xnnnn 換成 &#nnnnn
\\1表示對第一個括弧內的內容原樣保留,就是((#(\d{3,5}
------解決方案--------------------
x[a-fA-F0-9]{4}))這部分
------解決方案--------------------
引用:
$string = preg_replace('/&((#(\d{3,5}
------解決方案--------------------
x[a-fA-F0-9]{4}));)/', '&\\1',
str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $str……
這個是DISCUZ 的過濾函數對吧。
其實這個函數的意識就是過濾 HTML字串,但是那些已經被過濾了的,比如“'"”單引號雙引號。“&”的實體是&那麼像這樣的就不過濾,保留,以防多次過濾。結果 &變成了&amp;
//取消HTML代碼
function shtmlspecialchars($string) {
if(is_array($string)){
foreach($string as $key => $val) {
$string[$key] = shtmlspecialchars($val);
}
} else{
$string = preg_replace('/&((#(\d{3,5}
------解決方案--------------------
x[a-fA-F0-9]{4})
------解決方案--------------------
[a-zA-Z][a-z0-9]{1,5});)/', '&\\1',
str_replace(array('&', '"', '<', '>','\''), array('&', '"', '<', '>','''), $string));
}
return $string;
}