[英]“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.