我希望将html文本存储到数据库中,然后将其拆分为单个字符。由于文本很长并且过程频繁,因此性能特别重要。因此,我需要在PHP
中找到一种有效的方法来解决这个问题,而不会过载构建多个数组。
当然,目的是带有一些标记html标记的简单文本,没有嵌套节点。它可以考虑用于BBCode或类似的东西。我只想在这个拆分过程中跳过一些标签。
示例:
$html='This <i>is</i> a <strong>test</test>';
此字符串应作为
存储在mysql
数据库中
id character html_tag
1 T
2 h
3 i
4 s
5
6 i italic
7 s italic
8
9 a
10
11 t strong
12 e strong
13 s strong
14 t strong
15 !
如何在没有相应的html标签的情况下捕获单个字符?
答案 0 :(得分:2)
使用快速XMLReader解析Html。
此代码也适用于嵌套标记,$tags
变量是标记堆栈。在这里,我总是回显最嵌套的标签,最后一个在堆栈中。
$html='This <i>is</i> a <strong>test</strong>!';
$reader=new XMLReader();
$reader->XML('<root>'.$html.'</root>');
// skip root node
$reader->read();
$tags=array('');
while($reader->read())
switch($reader->nodeType)
{
case $reader::ELEMENT:
$tags[]=$reader->name;
break;
case $reader::END_ELEMENT;
array_pop($tags);
break;
default:
for($i=0;$i<strlen($reader->value);$i++)
// your insert sql here
echo "<br/>'".$reader->value[$i]."' ".end($tags);
}
此外,由于速度至关重要,请考虑将插入缓冲到字符串中并将其作为批处理运行:
INSERT INTO tname (character,html_tag) VALUES('T',''),('h','');