可以两个<符号连续出现HTML标记?

时间:2017-02-12 09:02:48

标签: php html regex wordpress

问题:在HTML中,表达式<<是否存在,其中第一个<是HTML标记的开头?

我的问题的根源如下。我基于WordPress运行mathematics website。你可以想象,帖子中有很多<>(数学不等式)。

对于长篇文章,我使用&#34;继续阅读&#34; WordPress提供的功能。当显示几个帖子&#34;继续阅读&#34;功能,使用<!--more-->标记,WordPress函数force_balance_tags用于正确平衡可能分布在<!--more-->标记上的HTML标记。

PHP force_balance_tags函数中存在错误。例如HMTL代码

< <strong>We</strong>

产生输出

< <strong>We

这是错误的,因为<bold> HTML标记未正确关闭。

我试图解决这个问题...但我来自遥远的地方(25年前的FORTRAN编程;-))。 force_balance_tags正在使用正则表达式。

因此我的初步问题。该错误的根本原因可能是force_balance_tags正在寻找一个>符号来关闭<初始符号,该符号不会被解释为不等号符号。

注意:我通过帖子中的Latex <更改\le符号找到了解决方法。但出于好奇,我有兴趣纠正force_balance_tags

2 个答案:

答案 0 :(得分:0)

不,不能。 HTML使用XML的语法,其中<注释元素。元素的名称不能包含字符<

阅读段落&#34; XML命名规则&#34;在这里:http://www.w3schools.com/xml/xml_elements.asp

答案 1 :(得分:0)

这不是错误。拥有多个标记开头(< <)是无效标记。标记无效是您应该总是尽量避免的;即使它在某些或所有浏览器中都能正确呈现,也无法保证。 Wordpress的force_balance_tags是一个破坏的案例。

由于您的网站经常需要这样的字符,正如您所说,您应该通过一个函数运行违规部分,该函数将用其html实体等价物<替换html字符>&lt; 1}},&gt;

这是php中的一个例子,使用str_replace

str_replace(["<", ">"], ["&lt;", "&gt;"], $mathRelatedContent);

但是,有了这个问题,您将无法再在帖子中使用直接的html标记。看看添加替代标记以及html转义(在Stack Overflow上发布问题时,请考虑类似于How to Format部分的内容!)