1

我想将 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 标签的情况下捕获单个字符?

4

1 回答 1

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','');
于 2012-12-14T20:05:44.730 回答