あらすじをお伝えします。
デフォルトの strip_tags() がうまく機能しないと思うため、サードパーティの HTML タグ ストリッパーを使用して特定の URL をスクレイピングしようとしています。(そのスクレーパーをチェックする必要はないと思います)
現在、一部のサイトの HTML ソース コードに、HTML タグ ストリッパーが失敗する原因となる奇妙なコードが含まれていることがあります。
そのような例の 1 つは、次のコードを含むこのサイトです。
<li><a href="<//?=$cnf['website']?>girls/models-photo-gallery/?sType=6#top_menu">Photo Galleries</a></li>
これにより、上記のタグ ストリッパーがこのエラーをスローします。
解析エラー: 構文エラー、予期しない T_ENCAPSED_AND_WHITESPACE、 /var/www/GET Tweets/htdocs/tmhOAuth-master/examples/class.html2text.inc(429)で T_STRING または T_VARIABLE または T_NUM_STRING を期待: 1行目の正規表現コード
致命的なエラー: preg_replace () [<a href='function.preg-replace'>function.preg-replace</a>]: コードの評価に失敗しました: $this->_build_link_list("<//?=$cnf[\' website\']?>girls/models-photo-gallery/?sType=6#top_menu", "フォト ギャラリー") は/var/www/GET Tweets/htdocs/tmhOAuth-master/examples/class.html2text にあります。ライン 429の株式会社
何が起こるかというと、多数の URL の配列があり、いくつかは上記のエラーをスローします。各 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 ブロックに移すようになったのはなぜですか?