當PHP解析一個文件時,會尋找開始<?php和結束標記?>,標記告訴PHP開始和停止解釋其中的代碼。此種方式的解析可以使PHP嵌入到各種不同的文檔中,凡是在一對開始和結束標記之外的內容都會被PHP解析器忽略。大多數情況下PHP都是嵌入在HTML文檔中的。
單行注釋僅僅注釋到行末或者當前的 PHP 代碼塊,視乎哪個首先出現。這意味著在 // ... ?> 或者 # ... ?>之後的 HTML 代碼將被顯示出來:?> 跳出了 PHP 模式並返回了 HTML 模式,// 或 #並不能影響到這一點。
由以上討論可可知,即使?>出現在//注釋中,PHP解析器也會認為PHP解析結束(當 PHP 碰到結束標記 ?> 時,就簡單地將其後的內容原樣輸出( 除非其後緊接著一個新行,參見指令分隔符)直到碰到下一個開始標記為止)。
復制代碼 代碼如下:
<?php
//$a = '<a href="test.html" title="#">test</a><a href="test.html" title="#">test</a>';
//preg_match_all('|<a[^>]+href="([^\"]*)".*?>|', $a, $b);
//print_r($b);
輸出為:
復制代碼 代碼如下:
:!php preg.php
|', $a, $b);
//print_r($b);
如何修正上述問題呢?或者你使用/* */進行注釋,或者將?>用字符串連接符進行連接,如下:
復制代碼 代碼如下:
<?php
$a = '<a href="test.html" title="#">test</a><a href="test.html" title="#">test</a>';
preg_match_all('|<a[^>]+href="([^\"]*)".*?'.'>|', $a, $b);
print_r($b);
這一細節同樣適用於JS結束標簽</script>