如何使用PHP计算HTML代码的行数?
我有一些由所见即所得编辑器(WordPress)生成的HTML。如何使用PHP计算HTML代码的行数?,php,html,regex,simplexml,Php,Html,Regex,Simplexml,我有一些由所见即所得编辑器(WordPress)生成的HTML。 我想通过最多显示3行文本(HTML格式)来显示此HTML的预览 示例HTML:(始终使用新行格式化) 你好,这是一些生成的HTML 某些列表项 一些列表项 一些列表项 我想在这个格式化的HTML中预览最多4行文本 要显示的预览示例:(数字表示行号,而不是实际输出) 您好,这是一些生成的HTML 一些列表项 一些列表项 这在正则表达式中是可能的,还是我可以使用其他方法? 我知道,正如我所质疑和回答的那样,用JavaScript以
我想通过最多显示3行文本(HTML格式)来显示此HTML的预览 示例HTML:(始终使用新行格式化) 你好,这是一些生成的HTML
我知道,正如我所质疑和回答的那样,用JavaScript以“黑客”的方式实现这一点是可能的。
但是我想纯粹在服务器端(使用PHP)实现这一点,可能使用SimpleXML?使用XPath非常简单:
$string = '<p>Hello, this is some generated HTML.</p>
<ol>
<li>Some list item</li>
<li>Some list item</li>
<li>Some list item</li>
</ol>';
// Convert to SimpleXML object
// A root element is required so we can just blindly add this
// or else SimpleXMLElement will complain
$xml = new SimpleXMLElement('<root>'.$string.'</root>');
// Get all the text() nodes
// I believe there is a way to select non-empty nodes here but we'll leave that logic for PHP
$result = $xml->xpath('//text()');
// Loop the nodes and display 4 non-empty text nodes
$i = 0;
foreach( $result as $key => $node )
{
if(trim($node) !== '')
{
echo ++$i.'. '.htmlentities(trim($node)).'<br />'.PHP_EOL;
if($i === 4)
{
break;
}
}
}
$string='您好,这是一些生成的HTML
一些列表项
一些列表项
一些列表项
';
//转换为SimpleXML对象
//一个根元素是必需的,所以我们可以盲目地添加它
//否则SimpleXMLElement会抱怨
$xml=新的SimpleXMLElement('.$string'.');
//获取所有text()节点
//我相信这里有一种选择非空节点的方法,但我们将把这种逻辑留给PHP
$result=$xml->xpath('//text()');
//循环节点并显示4个非空文本节点
$i=0;
foreach($结果为$key=>$node)
{
如果(修剪($node)!='')
{
echo++$i.'.htmlentities(trim($node)).
'.PHP_EOL;
如果($i==4)
{
打破
}
}
}
输出:
1. Hello, this is some generated HTML.<br />
2. Some list item<br />
3. Some list item<br />
4. Some list item<br />
1。您好,这是一些生成的HTML。
2.某些列表项
3.某些列表项
4.某些列表项
我个人编写了以下函数,虽然不完美,但对我来说效果很好
函数返回HTMLINES($html,$AMONTOFLINES=4){
$lines_arr=array_值(array_过滤器(preg_split('/\n |\r/',$html));
$linesToReturn=array\u slice($lines\u arr,0,$amountofline);
返回preg_replace('/\s{2,}/m','',内爆(''$linesToReturn));
}
使用echo
时返回以下HTML:
您好,这是一些生成的HTML。一些列表项 一些列表项
或格式化:
你好,这是一些生成的HTML
标记,因此它可以满足我的需要
对于文本文件的.html文件,谢谢您的链接,我已将其签出。我认为我的问题不同于之前提出的HTML问题,因为它将每个HTML标记计算为一行。我不希望
inline
元素标记表示一行。在我的例子中,“”也需要算作一行。没有一个简单的方法可以实现这一点。您需要它只是为了演示的原因?是的,我想有一个一致的行数进行预览。这将帮助用户在点击链接之前阅读部分文本。例如,在显示搜索结果时,您只希望在预览中显示3行@Jorgieguelsanchez试图找到一个PHP/服务器端解决方案对我来说似乎没有多大意义,至少没有给出到目前为止给出的参数/要求。如果你对客户一无所知,你首先就不知道文本的宽度。如果其中一个LI中的文本不仅仅是“某个列表项”,而是它的15或50倍呢?毫无疑问,在某个时候,单个LI会在客户机上分成几行…