2012-10-19 1 views
8

나는 HTML 파일을 가지고 있으며 자바 스크립트, PHP 및이 모든 것들을 사람들이 HTML 파일에 포함시킬 수도 있고하지 않을 수도 있습니다.HTML에서 의견 찾기

이 html 파일에서 모든 의견을 추출하고 싶습니다.

나는이 일에 두 가지 문제를 지적 할 수 있습니다 하나 개의 언어에 주석이 다른에 코멘트하지 않을 수 있습니다 무엇

  1. .

  2. 자바 스크립트에서 나머지 줄은 // 마커를 사용하여 주석 처리됩니다. 그러나 URL에도 //이 포함되어 있으므로 을 입력하면 //을 입력하고 그 다음으로는 행의 나머지 부분 인 을 아무 것도 입력하지 않으면 URL의 일부가 잘 제거 될 수 있습니다.

이렇게 사소한 문제는 아닙니다.

이미이 솔루션을 사용할 수 있습니까?

아무도 이미 이것을 했습니까?

+3

당신은 이것이 사소하지 않다는 것은 맞습니다. 주석을 안정적으로 제거하려면 파일 (PHP, HTML 및 Javascript)을 완전히 구문 분석해야합니다. 가능한 경우 PHP로 작업하는 것이 좋습니다. 필자는 Perl을 더 좋아하지만 PHP에서 작동하는 PHP 도구는 Perl 도구보다 PHP에서 작동하는 것이 낫습니다. 다음은 시작하기위한 것입니다. http://stackoverflow.com/questions/503871/best-way-to-automatically-remove-comments-from-php-code. 그런 다음 PHP에서 HTML 및 자바 스크립트 파서를 찾아 파일의 해당 부분에 대해 마찬가지로 수행해야합니다. – dan1111

+0

HTML 파일에 PHP가있는 이유는 무엇입니까? CSS, JavaScript 및 HTML을 사용하고 코멘트, 공백을 제거하고 일반적으로 페이지를 "축소"할 수있는 제품의 경우 "HTML Minifier"를 사용합니다. –

+1

@RB. 사전 렌더링 된? – Jivings

답변

0

정규 표현식을 기반으로 한 접근법을 숙고하고있는 것처럼 보입니다. 전체 파일에서 그렇게하는 것이 고통스럽고 재미 있고 흥미로운 텍스트를 강조 표시하거나 버리기 위해 몇 가지 도구를 사용해 보았습니다. 유지/폐기 기준에 따라 체에서 남은 것. HTML :: Tree 및 TreeBuilder를 살펴보면 HTML 마크 업을 처리하는 것이 매우 유용 할 수 있습니다.

2

문제 2 : "www.url.com"또는 "www.url.com"과 함께 모든 URL을 인용 할 때 어느 언어로 작성합니까? 나는 잘 모르겠다. 그렇다면 코드를 구문 분석하고 백 슬래시 앞에 인용 부호가 있는지 확인하여 실제 URL인지 주석인지 확인하십시오.

+0

그건 제가 지금하고있는 일입니다. –

+0

그럼 문제를 해결하셨습니까? 그렇지 않다면 (아마도 내가 당신의 질문을 제대로 이해하지 못했을 것입니다.) 문제가 무엇입니까? :) –

1

many languages에 대한 문법이있는 ANTLR과 같은 파서 생성기를 살펴보고 주석을 안정적으로 찾을 수있는 중첩 구문 분석기를 작성하십시오. 정확성이 중요한 경우 정규 표현식이 도움이되지 않습니다. 그렇다면 100 % 정확하지는 않습니다.

문제 3은, 언어의 댓글이 항상 언어의 주석 아니다 고려한다.

<textarea><!-- not a comment --></textarea> 
<script>var re = /[/*]not a comment[*/]/, str = "//not a comment";</script> 

문제 4, 언어에 포함 된 주석은 분명히 코멘트가 아닐 수도 있습니다.

<button onclick="&#47;&#47; this is a comment//&#10;notAComment()"> 

문제 5, 댓글은 브라우저 구성 방법에 따라 다를 수 있습니다.

<noscript><!-- </noscript> Whether this is a comment depends on whether JS is turned on --> 
<!--[if IE 8]>This is a comment, except on IE 8<![endif]--> 

나는 소프트웨어 구현 세부 사항을 누출 방지하기 위해 소스 코드에서 주석을 제거하다 상황에 맞는 템플릿 시스템에 부분적으로이 문제를 해결했다.

https://github.com/mikesamuel/html-contextual-autoescaper-java/blob/master/src/tests/com/google/autoesc/HTMLEscapingWriterTest.java#L1146은 JavaScript에서 주석이 식별되는 테스트 케이스를 보여주고 나중에 테스트 케이스는 CSS 및 HTML에서 식별 된 주석을 보여줍니다. 주석을 찾기 위해 해당 코드를 조정할 수 있습니다.PHP 코드 섹션에서 주석을 처리하지 않습니다.

0

HTML 파일을 문자 배열로 변환하고 구문 분석합니다. 앞으로 이동하고 해당 세그먼트를 건너 뛰거나 삭제할 때 "<", "-", "www", "http"와 같은 키 문자열을 감지 할 수 있습니다.

시작/끝 인덱스는 올바르게 식별되어야합니다. 이는 어려운 일이지만 최대한 힘을 발휘할 것입니다.

성능에 문제가없는 경우 프로세스를 단순화하는 다른 방법이 있습니다. 예를 들어, 모든 태그는 XML :: Twig로 잡을 수 있으며 JS 주석을 감지하기 위해 문자열을 구문 분석 할 수 있습니다.