簡體   English   中英

帶有格式化內容的帖子的“閱讀更多”選項-PHP

[英]“Read More” option for posts with formatted content - PHP

我正在使用文本編輯器在我的WEB( )上輸入帖子。 文本格式正確(我有圖像,文本帶有樣式),因此數據庫中的帖子以HTML格式存儲。 例如,這是將帶有圖像和一些文本的帖子存儲在數據庫中的方式:

<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>

當顯示時,它將看起來像這樣 我只使用PHP,沒有任何框架。 現在,我希望每個帖子的首頁上只有幾個詞,並添加一個“閱讀更多”按鈕,該鏈接將指向包含該帖子所有內容的頁面。 我嘗試過(但是我希望它不會起作用)對文本進行子字符串化。 它不起作用,因為該帖子被當作普通字符串使用(php無法看到標記未關閉),並且如果我指定僅使用前200個字符,並且在此期間有<i>標記,如果關閉</i>標記不是用這200個字符組成,我帖子下方的所有文本均用斜體顯示。 或另一種情況,如果拆分為200個字符,則由於文本未完全獲取而無法顯示圖像。

有沒有辦法我可以以某種方式轉換內容,並且從數據庫中獲取前200個租船人(這個數字只是一個例子,不需要為所有職位固定),所有標簽均應關閉時間和帖子下面的內容是否正常?

這很困難,因為缺少數據結構。 是否可以選擇刪除標簽? 您是否有可能添加一些結構? 說一個額外的字段,人們可以在其中存儲標題,您可以將其用作錨點。

也許兩者兼而有之。 您還有第二個輸入,您可以用自己認為合適的錨點進行預填充,如果有問題,他們可以改進它。

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

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;
}

我在這里找到了這個解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM