2010-03-20 4 views
0

종료 태그가없는 곳에 종료 html 태그를 삽입하는 방법은 무엇입니까?누락 된 태그에 대한 종료 태그 삽입 html로

<tr> 
<td>Index No.</td><td>Name</td> 

<tr> 
<td>1</td><td>Harikrishna</td> 

경우 두/TR "등의 적절한 결말 태그를 삽입하는 방법이 누락 된 태그를 어디에 어떻게 검색이 경우 /tr".Now을하고"tags.That입니다 끝없는처럼 ".

답변

1

HTML Tidy을보고 필요할 때 사용할 수 있는지 확인하십시오.

+0

@Dav, 끝 태그가없는 곳에 끝 태그를 삽입하는 코드를 작성하고 싶습니다. – Harikrishna

+0

@ nobugz, HTML Tidy는 HTML 소스를 다시 생성 할 수있는 도구 또는 소스 코드입니다. 그것이 툴이라면 누락 된 곳에 엔딩 태그를 삽입하기 위해 어떤 코드를 작성할 수 있습니까? – Harikrishna

2

가능한 모든 경우를 처리하려는 경우 수행해야 할 작업입니다. HTML은 일반 언어가 아닙니다. IMHO 당신은 소스에서 문제를 해결하려고 노력해야합니다. 처음에는 잘못된 HTML을 얻었습니다.

+1

@Darin Dimitro, 무엇 이럴? – Harikrishna

+0

@Harikrishna, 내 겸손한 견해에서. –

+0

HTML 애자 팩을 사용하여 HTML 컨텐트를 파싱합니다. 그리고 html 파일에 누락 된 태그가 있으면 파싱이 올바르게 수행되지 않습니다. 어쨌든 결말 태그가없는 곳에서 끝 태그를 삽입하려면 HTML Agility Pack을 사용하십시오. – Harikrishna

1

위의 내용에 대해서는 언급 할 수 없으므로 여기에서 유의하겠습니다. HTML Tidy을 HTML 조각 정리에도 사용할 수 있습니다. 여기에 예를 참조 :
http://www.php.net/manual/en/tidy.examples.basic.php

HTML 지저분하게하는 또 다른 방법은 정규 표현식로 출력 코드를 청소하는 것입니다 - 나는 아래의 예를 제공합니다. 그러나 이것이 처리 측면에서 더 빠르지 만, HTML Tidy와 같이 보편적이지는 않습니다 (유지 보수 측면에서).

코드

<?php 

$html = " 
<table> 
<tr class=\"lorem\"> 
<td>Index No.</td> 
<td>Name</td> 

<tr> 
<td>0</td> 
<td>FooBaz</td> 

<tr> 
<td>1</td> 
<td>Harikrishna</td> 

<tr class=\"ipsum\"> 
<td>2</td> 
<td>Foo</td> 
</tr> 

<tr> 
<td>3</td> 
<td>Bar</td> 


</table> 
"; 

// regex magic 
$start_cond = "<tr(?:\s[^>]*)?>"; 
$end_cond = "(?:{$start_cond}|<\/table>)"; 
$row_contents = "(?:(?!{$end_cond}).)*"; 

// first remove all </tr> tags 
$xhtml = preg_replace("/<\/tr>/ism", "", $html); 

// now re-add </tr> tags where appropriate 
$xhtml = preg_replace("/({$start_cond})({$row_contents})/ism", "$1$2</tr>\n", $xhtml); 

// ignore: just for writing comparision output 
echo "<h2>Before:</h2>"; show_count($html); 
echo "<h2>After</h2>"; show_count($xhtml); 

function cmp($patt,$html) { 
    $count = preg_match_all("/{$patt}/ism", $html, $matches); 
    return htmlentities("\n{$count} x {$patt}"); 
} 
function show_count($html) { 
    echo "<pre>" 
     . cmp("<tr(\s[^>]*)?>",$html) 
     . cmp("<\/tr>",$html) 
     . "</pre>"; 
} 
?>

출력


Before: 
5 x <tr(\s[^>]*)?> 
1 x <\/tr> 

After 
5 x <tr(\s[^>]*)?> 
5 x <\/tr> 
+0

@MicE .. C#에서 이것을 수행하는 코드를 알고 있습니까? – Harikrishna

+0

죄송 합니다만, 나는 그렇지 않다고 두려워합니다. 위의 예제는 PHP로되어 있지만 정규 표현식과이를 수행하기위한 논리는 언어가 일반적으로 사용되는 PCRE 구문 (PCRE = Perl Compatible Regular Expressions)을 지원한다면 언어에 관계없이 거의 동일해야합니다. – MicE

관련 문제