0

あらすじをお伝えします。

デフォルトの 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 ブロックに移すようになったのはなぜですか?

4

2 に答える 2

0

解析する前に、 Tidyのような美化スクリプトを使用することをお勧めします。そして、あなたの問題は追加することで解決できます

$html_content = htmlspecialchars($html_content)
于 2012-11-26T08:14:15.920 に答える
-1

解析エラー(または致命的なエラー)をキャッチすることはできませんが、コードがロードされるとすぐに生成されるため、解析エラーはさらに悪化します。それらを分離するために私が知っている最善の方法は、回復したいものに対して完全に独立したPHPプロセスを実行し、致命的なエラーを生成することを期待することです。

PHPの致命的なエラーをキャッチする方法も参照してください。

于 2012-11-26T08:17:35.950 に答える