搜索所有打开的 HTML 标签并关闭它们 [PHP]
Searching for all open HTML tags and closing them [PHP]
我在我们教会的网站上有一个名为 "The Fridge" 的页面,该页面旨在模仿冰箱,您可以在冰箱上放置便签以获取有关教堂中发生的事情的信息。
你可以在这里看到:http://www.ypc.org.au/resources/fridge
由于便利贴大小不一,信息量或多或少,超过 50 个字符的信息将用省略号截断,其余信息可通过单击便笺通过模态框查看。
这工作正常,但标签并不总是正确结束。
例如,如果
标记被打开并且该段落中的信息超过 50 个字符,它将在该段落结束之前被截断。
这会导致 HTML 无效,并且所有音符的颜色(通过 css 随机化)都是相同的颜色。这不是一个大问题,但如果有有效的 HTML 并且颜色随机化一点会很好。
我想要做的是搜索一个开放标签,确定该开放标签是什么,然后在达到 50 个字符后,结束所有检测到的开放标签。
我知道这并不总是一个完美的解决方案,因为如果标签是半打开或关闭的,用户会看到,但只需添加或删除几个词就足够容易了
在那些情况下。
所以我想我需要做这样的事情(但可能是完全错误的;也知道它是 PHP 和伪代码的混合体):
REPEAT
$tag[x]
Search for the "<" character
If found {
go to the next character and append to $tag[x] variable until ">" character is found.
$x++
}
UNTIL (NO MORE TAGS FOUND)
Once 50 characters reached (excluding the start tag as user wont see HTML tags),
see if the tag has been closed.
If the tag has not been closed {
Echo "<" . $ tag . ">" to end the tag.
}
这里是我的 PHP 代码如何处理一些虚假信息以避免数据库连接等的简单版本(必须像文件那样做,因为标题部分没有转置到页面上):
http://www.ypc.org.au/fridge.zip
如果有人能对此提供帮助,将不胜感激!这让我很头疼。
您可以为此使用 DOMDocument:
$yourText = "<div><span>Text<em>!";
$doc = new DOMDocument();
$doc->loadHTML($yourText, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$yourText = $doc->saveHTML();
echo $yourText;
输出:
<div><span>Text<em>!</em></span></div>
编辑: 如果您的文本被截断并且恰好以 <p>This is long text</
之类的内容结尾,DOMDocument
将愉快地去除截断的标签并重建它。但是,它会针对它所做的事情发出 警告。要取消该警告,您可以将 libxml_use_internal_errors(true);
放在 loadHTML()
之前。
我在我们教会的网站上有一个名为 "The Fridge" 的页面,该页面旨在模仿冰箱,您可以在冰箱上放置便签以获取有关教堂中发生的事情的信息。
你可以在这里看到:http://www.ypc.org.au/resources/fridge
由于便利贴大小不一,信息量或多或少,超过 50 个字符的信息将用省略号截断,其余信息可通过单击便笺通过模态框查看。
这工作正常,但标签并不总是正确结束。 例如,如果
标记被打开并且该段落中的信息超过 50 个字符,它将在该段落结束之前被截断。
这会导致 HTML 无效,并且所有音符的颜色(通过 css 随机化)都是相同的颜色。这不是一个大问题,但如果有有效的 HTML 并且颜色随机化一点会很好。
我想要做的是搜索一个开放标签,确定该开放标签是什么,然后在达到 50 个字符后,结束所有检测到的开放标签。 我知道这并不总是一个完美的解决方案,因为如果标签是半打开或关闭的,用户会看到,但只需添加或删除几个词就足够容易了 在那些情况下。
所以我想我需要做这样的事情(但可能是完全错误的;也知道它是 PHP 和伪代码的混合体):
REPEAT
$tag[x]
Search for the "<" character
If found {
go to the next character and append to $tag[x] variable until ">" character is found.
$x++
}
UNTIL (NO MORE TAGS FOUND)
Once 50 characters reached (excluding the start tag as user wont see HTML tags),
see if the tag has been closed.
If the tag has not been closed {
Echo "<" . $ tag . ">" to end the tag.
}
这里是我的 PHP 代码如何处理一些虚假信息以避免数据库连接等的简单版本(必须像文件那样做,因为标题部分没有转置到页面上):
http://www.ypc.org.au/fridge.zip
如果有人能对此提供帮助,将不胜感激!这让我很头疼。
您可以为此使用 DOMDocument:
$yourText = "<div><span>Text<em>!";
$doc = new DOMDocument();
$doc->loadHTML($yourText, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$yourText = $doc->saveHTML();
echo $yourText;
输出:
<div><span>Text<em>!</em></span></div>
编辑: 如果您的文本被截断并且恰好以 <p>This is long text</
之类的内容结尾,DOMDocument
将愉快地去除截断的标签并重建它。但是,它会针对它所做的事情发出 警告。要取消该警告,您可以将 libxml_use_internal_errors(true);
放在 loadHTML()
之前。