1

ランダムな Web サイトを解析し、すべての単語がリンク (辞書のツールヒント用) になるようにコンテンツを変更してから、Web サイトを iframe に表示したいと考えています。

私は完全な解決策を探しているのではなく、ヒントや考えられる戦略を探しています。リンクは私の問題です.Webサイトを解析してiframeに表示するのは非常に簡単です. 基本的に、すべてのhtmlコンテンツを含む文字列があります。サーバー側で行う方が良いのか、ページがJSでロードされた後に行う方が良いのかさえわかりません。

Ruby on Rails、jQuery、jRails を使用しています。

注: href タグの内容は単語によって異なります。

明確化: 私は正規表現を試しましたが、すでに動作しています:

@site.gsub!(/[A-Za-z]+(?:['-][A-Za-z]+)?|\\d+(?:[,.]\\d+)?/) {|word| '<a href="">' + word + '</a>'}

しかし問題は、テキスト内の単語のみを置き換え、HTML をそのままにしておくことです。だから私はそれが正規表現の問題だと思います...

アイデアをありがとう。

4

4 に答える 4

2

正規表現がこのために機能するとは思わない-または、少なくとも、それは常に脆弱になるだろう。より良い方法は、HpricotまたはNokogiriを使用してページを解析し、それを調べてプレーンテキストであるノードを変更することです。

于 2009-03-23T19:17:19.127 に答える
1

すでにほとんど計画されているようです。

コンテンツを単語に分割してから、単語ごとに、次のようなリンクを作成します。<a href="http://dictionary.reference.com/dic?q=whatever&search=search">whatever</a>

編集(あなたのコメントに基づく):ああ...私はあなたがスクリーンスクレイピングテクニックを探し回ることをお勧めします。それらのほとんどは、<と>文字の間のすべてを削除し、<br>と<p>を改行に置き換えることから始める必要があります。

于 2009-03-23T18:18:27.177 に答える
1

正規表現を使用する前に、Nokogiri を使用して HTML 構造を削除します。

no_html = Nokogiri::HTML(html_as_string).text
于 2009-03-26T02:56:27.867 に答える
-2

単純。HTML をハッシュし、正規表現を実行してから、HTML のハッシュを解除します。

<?php
class ht
{
    static $hashes = array();

    # hashes everything that matches $pattern and saves matches for later unhashing
    function hash($text, $pattern) { 
        return preg_replace_callback($pattern, array(self,'push'), $text);
    }

    # hashes all html tags and saves them
    function hash_html($html) {
        return self::hash($html, '`<[^>]+>`');
    }

    # hashes and saves $value, returns key
    function push($value) {
        if(is_array($value)) $value = $value[0];
        static $i = 0;
        $key = "\x05".++$i."\x06";
        self::$hashes[$key] = $value;
        return $key;
    }

    # unhashes all saved values found in $text
    function unhash($text) {
        return str_replace(array_keys(self::$hashes), self::$hashes, $text);
    }

    function get($key) {
        return self::$hashes[$key];
    }

    function clear() {
        self::$hashes = array();
    }
}
?>

使用例:

ht::hash_html($your_html);
// your word->href converter here
ht::unhash($your_formatted_html);

ああ...そう、私はこれをPHPで書きました。ruby や js に変換する必要があると思いますが、考え方は同じです。

于 2009-03-23T20:08:16.133 に答える