2009-03-23 2 views
1

임의의 웹 사이트를 구문 분석하고 모든 단어가 사전 툴팁에 대한 링크로 표시되도록 콘텐츠를 수정 한 다음 웹 사이트를 iframe에 표시하고 싶습니다.원격 웹 사이트를 구문 분석하고 모든 단어 하나에 사전 툴팁에 대한 링크를 만드는 방법은 무엇입니까?

완전한 해결책을 찾고 있지만 힌트 또는 가능한 전략이 아닙니다. 연결 문제는 웹 사이트를 파싱하고 iframe에 표시하는 것이 매우 간단합니다. 그래서 기본적으로 모든 html 콘텐츠가 포함 된 String을가집니다. serveride 또는 페이지가 JS로로드 된 후에 더 나은지 확실하지 않습니다.

저는 Ruby on Rails, jQuery, jRails로 작업하고 있습니다.

참고 : href 태그의 내용은 단어에 따라 다릅니다.

명확한 설명

: 이 나는 ​​정규 표현식을 시도하고 이미 가지 작동합니다

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

을하지만 문제는 텍스트의 단어를 대체하고 그대로 HTML을 떠날 것입니다. 그래서 그것은 정규 표현식 문제라고 생각합니다 ...

어떤 아이디어 주셔서 감사합니다.

답변

2

저는 정규 표현식이 이것을 위해 작동하지 않을 것이라고 생각합니다. 적어도, 항상 깨지기 쉽습니다. 더 좋은 방법은 Hpricot 또는 Nokogiri을 사용하여 페이지를 구문 분석 한 다음 일반 텍스트 인 노드를 수정하는 것입니다.

1

대부분 이미 계획 한 것 같습니다.

분할 단어에 다음 각 단어에 대한 링크를 만든 콘텐츠 (귀하의 의견에 따라) 같은 <a href="http://dictionary.reference.com/dic?q=whatever&search=search">whatever</a>

편집 : 아 ... 난 당신이 스크린 스크래핑 기술에 대한 주위를 검색하는 것이 좋습니다. 대부분은 <과> 문자 사이의 항목을 제거하고 <br> 및 <p >을 줄 바꾸기로 시작해야합니다.

+0

감사합니다. 나는 이것을 시도했다 @ site.gsub! (/ [A-Za-z] + (? : [ '-] [A-Za-z] +)? \\ d + (? : [,.] \\ d +)? /) {| 단어 | '' + word + ''} 하지만 HTML 태그가 아닌 텍스트의 단어 만 바꾸는 방법이 필요합니다. 어떤 아이디어? –

-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에서이 썼다. 루비 또는 js로 변환해야 할 것 같지만 아이디어는 같습니다.

+0

정규 표현식을 읽기가 약간 어렵지만,>와 <사이의 모든 텍스트를 일치시킬 수 있으며, 그 단어를 단어로 분해 한 다른 함수로 전달할 수 있습니다. 태그가 시작되고 끝나는 올바른 형식의 HTML이 있다고 가정하면 가장자리의 경우는 필요하지 않습니다. – mpen

+0

이렇게하면 양식이 완전히 엉망이 될 것입니다.

+0

아니요 실제로는 그렇지 않습니다. 스크립트 태그 내부의 모든 것을 해시하기 위해 해시 패턴을 수정하기 만하면 코드가 파싱되지 않습니다. 사실 그것이 바로이 수업을 쓴 이유입니다. – mpen

1

정규식을 사용하기 전에 Nokogiri를 사용하여 HTML 구조를 제거합니다.

no_html = Nokogiri::HTML(html_as_string).text 
관련 문제