我會給你的要點。如果函數在PHP中引發致命錯誤,如何在下一個循環中繼續執行?
我想使用third party HTML tag stripper刮取某些URL,因爲我不認爲默認的strip_tags()能很好地完成這項工作。 (我不認爲你需要檢查該刮板)
現在有些時候,一些網站的HTML源代碼包含一些奇怪的代碼,導致我的HTML標籤剝離失敗。
一個這樣的例子是this site包含下面的一段代碼:
<li><a href="<//?=$cnf['website']?>girls/models-photo-gallery/?sType=6#top_menu">Photo Galleries</a></li>
導致上述標籤汽提塔以引發此錯誤:
解析錯誤:語法錯誤,意外的 T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或 T_NUM_STRING位於/var/www/GET Tweets/htdocs/tm hOAuth主/示例/ class.html2text.inc(429):在線路 的regexp代碼
致命錯誤: 的preg_replace()<一個 HREF = 'function.preg-替換' >功能.preg-replace </a >]: 評估代碼失敗: $ this- & gt; _build_link_list(& quot; & lt; //?= $ cnf [\'website \']? & GT;女孩/模型-光廊/ STYPE = 6#top_menu & QUOT ;, & QUOT;圖集& QUOT;在/VAR)/網絡/ GET 鳴叫/ htdocs中/ tmhOAuth主/示例/ class.html2text.inc在線
現在發生的事情是,有很多的URL的數組,有的拋出上述錯誤。我對每個網址做了一些處理。
如果數組中的某個URL引發這樣的錯誤,我希望執行繼續處理下一個URL,而不會干擾任何內容。我的代碼是這樣的:
foreach ($results as $result)
{
$url=$result->Url;
$worddict2=myfunc($url,$worddict2,$history,$n_gram);
}
這裏myfunc處理並使用我提到的第三方HTML脫衣舞。 我試過的代碼修改,以這樣的:
foreach ($results as $result)
{
$url=$result->Url;
$worddicttemp=array();
try
{
$worddicttemp=myfunc($url,$worddict2,$history,$n_gram); //returns the string represenation of what matters, hopefully
//The below line will be executed only when the above function doesn't throw a fatal error
$worddict2=$worddicttemp;
}
catch(Exception $e)
{
continue;
}
}
但是我仍然得到同樣的錯誤。 有什麼不對?爲什麼myfunc()中的代碼在遇到致命錯誤時立即將控制權轉移給catch塊?
使用到的strstr檢查,如果你有$ worddicttemp錯誤,如果true,則使用繼續轉到下一個網址 –
,它使用的preg_replace「E」修飾是很百搭HTML脫衣舞。我會尋找其他的解決方案,因爲正在討論的功能正在走向渡渡鳥的道路。 – cleong
我相信preg_ *的eval修飾符遲早會被移除,現在可能會更好。 – Dale