2013-03-20 73 views
0

在我的應用程序中,人們正在發佈評論,有時候用戶沒有關閉標籤,因此破壞了我的所有佈局。如何使用php在註釋中關閉標籤

我允許用戶發佈html評論。

例如他們張貼這樣:

<center><b>Hello 

所以,我想要的是關閉網頁上的代碼,使這樣說:

<center><b>Hello</b></center> 

我搜索在谷歌,但din't找到一個好的解決方案,所以我在這裏。

我試過這種方法,但它不起作用。

$yourText = $row['content']; 

$doc = new DOMDocument(); 
$doc->loadHTML("$yourText"); 
$yourText = $doc->saveHTML(); 

謝謝。

回答

1

您可以使用此功能來關閉所有打開的HTML標籤的內容:

function closeHtmlTags($html) { 

    preg_match_all('#<(?!meta|img|br|hr|input\b)\b([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result); 
    $openedtags = $result[1]; 
    preg_match_all('#</([a-z]+)>#iU', $html, $result); 
    $closedtags = $result[1]; 
    $len_opened = count($openedtags); 

    if (count($closedtags) == $len_opened) { 
     return $html; 
    } 
    $openedtags = array_reverse($openedtags); 

    for ($i=0; $i < $len_opened; $i++) { 
     if (!in_array($openedtags[$i], $closedtags)) { 
      $html .= '</'.$openedtags[$i].'>'; 
     } else { 
      unset($closedtags[array_search($openedtags[$i], $closedtags)]); 
     } 
    } 

    return $html; 
} 

只要致電:

$content = closeHtmlTags($content); 

這將返回的內容將所有的HTML標籤關閉。

您也可以使用PHP擴展php_tidy

$tidy = new Tidy(); 
$content = $tidy->repairString($str, array(
    'output-xml' => true, 
    'input-xml' => true 
)); 

希望這有助於

+0

我會試試這種方式看起來很安全:) @Sabari – deerox 2013-03-20 17:34:00

+0

功能似乎工作正常:)非常感謝你 – deerox 2013-03-20 17:42:29

+0

@deerox酷。讓我知道如果你面臨任何問題 – Sabari 2013-03-20 17:43:19

0

不允許用戶發佈HTML!他們可以修改您的網站,添加Javascript,做任何他們想要的。

確保刪除HTML格式與strip_tags()

1

你可能尋找HTML Tidy

<?php 
ob_start(); 
?> 
<html>a html document</html> 
<?php 
$html = ob_get_clean(); 

// Specify configuration 
$config = array(
      'indent'   => true, 
      'output-xhtml' => true, 
      'wrap'   => 200); 

// Tidy 
$tidy = new tidy; 
$tidy->parseString($html, $config, 'utf8'); 
$tidy->cleanRepair(); 

// Output 
echo $tidy; 
?> 
0

您可以搜索開放標籤的數量,然後搜索關閉標籤的數量,並確保號碼匹配 - 如果它不不提交,並讓用戶知道。

0

最簡單和dyrtiest的方法是這樣的:

$yourText = $row['content']; 

$doc = new DOMDocument(); 
$doc->loadHTML("$yourText"); 
$otherText = $doc->saveHTML(); 

if(!empty($otherText)){ 
    //the usertext was good html 
}else{ 
    $yourText = strip_tags($yourText); 
} 

,但你最終可能會與一些嚴重的XXS打針!

+0

我是內[114]嘗試這種方式,以及謝謝@iTroubs – deerox 2013-03-20 17:35:07

+0

@deerox但要記住的XXS注射。你真的應該考慮使用整潔或什麼來限制用戶使用一些標籤,如腳本或類似的東西,真的可以做一些(聲譽)損害 – ITroubs 2013-03-20 17:37:49

+0

好的謝謝你的信息我會期待整齊:) – deerox 2013-03-20 17:43:51