簡體   English   中英

再次使用PHP正則表達式

[英]PHP regular expression again

之間有什么區別:

preg_replace( '@<(script|style)[^>]*?>.*?</\\1>@si', '', $string );

preg_replace( '@<(script|style)[^>]*>.*</\\1>@si', '', $string );

是...

考慮這個示例字符串...

<script>bla</script><script>hello</script>
  • 第一個匹配后將停止匹配; 這被稱為不貪婪的比賽。

在上面的示例中,它將僅匹配第一個script元素。

  • 第二個將匹配第一個和最后一個結束標記之間的所有內容,也許會消耗內部的其他匹配項 這被稱為貪婪,因為它將消耗盡可能多的能量。

它將匹配<script>bla</script><script>hello</script>

第一個非貪婪可能不需要存在,因為它將始終搜索所有非> ,然后在其后面也不應有其他任何字符(在non >和close > )。

我還需要提到使用類似DOMDocument的方法是獲取scriptstyle元素的更好的方法。

$dom = new DOMDocument;

$dom->loadHTML($string);

$scripts = $dom->getElementsByTagName('script');

$styles = $dom->getElementsByTagName('style');

額外的? 會使表達式的貪婪性反轉(默認情況下,它們在php中是貪婪的):

  • /a+b/將匹配aaab中的aaab
  • /a*b/將匹配aaab中的aaab
  • /a*?b/將匹配aaab中的b
  • /a+?b/將匹配aaab中的ab

因此,在您的特定示例中,可以這么說,非貪婪的表達式將捕獲腳本標簽及其內容。 貪婪的版本將開始與第一個腳本標簽匹配,並搶占所有內容(包括非腳本區域)直到最后一個關閉的腳本標簽。

不過,不要依賴:

http://ha.ckers.org/xss.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM