2014-09-05 99 views
0

我正在使用文本編輯器輸入我的WEB上的帖子(this one)。文本格式正確(我有圖像,文字是樣式的),所以我的數據庫中的文章以HTML格式存儲。例如,這是如何與圖像的職位和一些文本將被存儲在數據庫:「閱讀更多」選項的格式化內容 - PHP

<p><img alt="image" src="./img/news-img.jpg" style="height1:311px; width1:1157px" /></p> 
<p style="text-align: justify;"><span style="color:rgb(112, 112, 112); font-family:opensansregular; font-size:14px"> 
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span></p> 

而且它看起來就像this東西時顯示。我只使用沒有任何框架的PHP。現在,我想在每個帖子的主頁上只顯示幾個字詞,並添加一個「Read More」按鈕,這將導致包含帖子所有內容的頁面。我試過(但我預計它不會工作)來對文本進行子串處理。它不工作,因爲該職位是作爲普通字符串(PHP不能看到標籤沒有關閉),如果我指定只採取前200個字符,並在同時有<i>標記,如果關閉</i>標記是不是在這200個字符中,我帖子下面的所有文字都是斜體。或者另一種情況是,如果以200個字符進行分割,則圖像不顯示,因爲文本未被完全取走。

有沒有一種方法可以以某種方式轉換內容,並且當從數據庫中獲取前200名租船人(此編號僅僅是一個示例,並且不需要固定所有文章)時,所有標籤都是平均時間關閉,該帖子下方的內容是正常的?

回答

0

我解決了使用此功能我的問題:

function closetags($html) { 
    #put all opened tags into an array 
    preg_match_all('#<([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result); 
    $openedtags = $result[1]; #put all closed tags into an array 
    preg_match_all('#</([a-z]+)>#iU', $html, $result); 
    $closedtags = $result[1]; 
    $len_opened = count($openedtags); 

    # all tags are closed 
    if (count($closedtags) == $len_opened) { 
     return $html; 
    } 

    $openedtags = array_reverse($openedtags); 
    # close tags 
    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; 
} 

我發現這個解決方案here

0

這很困難,因爲缺乏數據結構。 將刪除標籤是一個選項? 有沒有機會添加一點結構?說一個額外的領域,人們可以存儲一個標題,你可以用它作爲你的主播。可能是兩者的組合。你有第二個輸入,你可以預先填寫你認爲是好的錨點,如果有問題,他們可以改進它。