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 に答える