我使用文本编辑器在我的WEB上输入帖子(this one)。文本格式正确(我有图像,文本样式),因此我的数据库中的帖子以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>
显示时看起来像this。我只使用没有任何框架的PHP。现在我想在每个帖子的主页上只有几个单词,并添加一个按钮&#34; Read More&#34;这将导致页面包含帖子的所有内容。我试过(但我希望它不会工作)来对文本进行子串。它不起作用,因为帖子被视为普通字符串(php无法看到标签未关闭),如果我指定只采用前200个字符,并且同时有<i>
标记,如果关闭</i>
标记不在这200个字符中,我帖子下面的所有文字都是斜体。或者另一种情况,如果以200个字符分割,则不显示图像,因为文本未完全拍摄。
有没有办法可以以某种方式转换内容,并且当从数据库获取前200个承租人(这个数字只是一个例子而不需要为所有帖子修复)时,所有要关闭的标签平均时间和帖子下面的内容是否正常?
答案 0 :(得分:0)
这很困难,因为缺乏数据结构。 删除标签是一种选择吗? 您是否有可能添加一点结构?说一个额外的字段,人们可以存储标题,你可以将其用作锚点。
也许两者兼而有之。你有第二个输入,你预先填写你认为是一个好锚的东西,如果有问题,他们可以改进它。
答案 1 :(得分: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。