PHP HTMLコード文字列インターセプト実装コード
そして、与えられるデータは次のような HTML コード文字列です:
インターセプトするときは、div タグ内のコンテンツをインターセプトし、HTML タグを保持し、その中のテキストのみを処理する必要があります。たとえば、「李思」の「李」という単語をインターセプトするだけかもしれませんが、このようにフロントエンドに置くと、「李思」の前の a タグが閉じられないので、インターセプト後に、 HTML 構文が正しいことを確認する必要があります。
この問題は本当に解決するのが簡単ではなく、私は二日間憂鬱になりました。これは単なる文字列ですが、内容は HTML コードであり、DOM がないことに注意してください。フロントエンドで処理できれば、DOM を直接取得して内部のノードを処理し、最終的に innerHTML などを出力することができます。今はうまくいかないので、考えを変えなければなりません。同僚のアイデアは次のとおりです:
文字列の各文字をトラバースします。タグを設定し、タグの先頭で < タグが見つかった場合は 1 に設定し、その後の文字はカウントされません。ラベル内の文字列を処理するときは、まず現在の文字のエンコーディングが中国語であるかどうかを判断する必要があります。一般に、PHP で UTF-8 でエンコードされた中国語の文字の長さは 3 です。したがって、中国語の文字エンコーディングが見つかった場合は、カウントされていないものを 2 つスキップしなければなりません... この時点で、私の頭は大きくなり始めています。個人的には、この方法は非常に不快だと思います。まず、この種の絶妙なロジックを制御するのは簡単ではありません。また、UFT-8 エンコーディングで生成される中国語の長さは 3 または 4 になる可能性があるため、コードの厳密さには疑問があります。 。
私の個人的なアイデアは、Tidy を使用することです (具体的な使用方法については、PHP マニュアルを参照してください)。昨日Tidyについて勉強したところ、これがとても便利であることがわかりました。まず、この文字列を次のように Tidy オブジェクトに変換します。
$tidy = Tidy_parse_string($str, array(), 'utf8'); // 最後のステップは、エンコーディングを設定することです。 utf- 8。中間接続はありません。
次に、$tidy で本文を取得します (変換後、$tidy は
などのタグを自動的に追加するため):$body = Tidy_get_body($tidy);
次の場所で var_dump を使用できます。今回は $body の構造を見ると、各タグが対応する属性を持つ対応するオブジェクトに変換されていることがわかります。たとえば、sdf などのステートメントに対応する属性は次のとおりです。
name=>”a”
value => “sdf"
child=> array{[0]=>テキスト ノード オブジェクト、値は sdf}
attribute=array{"href"=>"#"}
… ..その他の属性
ご覧のとおり、実際には、HTML の整合性を破壊しないように、a タグに対応するノードの下のテキスト ノードの値を個別に処理できます。当初は、aラベルのテキストノードの値を変更すると、それに合わせてaラベルの値も変更されると考えていましたが、その場合はaに対応するノードの値を直接返せばOKです。残念ながら、そのようなものになるとは予想していなかったので、その中のテキストを自分で記述する必要がありました。
Tidy オブジェクトの構造を理解した後は、すべてのノードを走査するだけで、div タグを見つけて内部のノードの処理を開始することができます。コードは次のとおりです。
if(mb_strwidth($subchild->value, 'utf-8') >= $len)
{
$subchild->value = mb_strimwidth($subchild->value, 0, $ len, '…', 'utf-8');
$trimed_str .= $subchild->value;
break;
}
else
{
$trimed_str .= $subchild->value;
$len = $len - mb_strwidth($subchild->value, 'utf-8');
}
の$subchildは子ノードです。ここでは、文字列の長さを取得するために mb_strwidth が使用されていることに注意してください。この mb_strwidth を強くお勧めします。これは非常に便利です。中国語を長さ 2 文字として扱い、ここでのニーズを正確に満たします。さらに、文字列をインターセプトするときに mb_strimwidth が使用されます。この関数は中国語も 2 文字として扱います。mb_ で始まる関数は非常に使いやすいです。
具体的なコードは書きません。要件に基づいて書かれており、汎用的な形式ではないためです。いつかそれを普遍的なものにして公開する時間ができました。
さらに、FireFox が text-overflow 属性をサポートしていないのは残念です。そうでない場合は、バックグラウンドで苦労して切り詰める必要はありません。もっと良い方法がある場合は、ディスカッション用にメッセージを残してください。その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









HTML の表の境界線に関するガイド。ここでは、HTML でのテーブルの境界線の例を示しながら、テーブル境界線を定義する複数の方法について説明します。

HTML マージン左のガイド。ここでは、HTML margin-left の概要とその例、およびそのコード実装について説明します。

これは、HTML でのネストされたテーブルのガイドです。ここでは、テーブル内にテーブルを作成する方法をそれぞれの例とともに説明します。

HTML テーブル レイアウトのガイド。ここでは、HTML テーブル レイアウトの値と例および出力について詳しく説明します。

HTML 入力プレースホルダーのガイド。ここでは、コードと出力とともに HTML 入力プレースホルダーの例について説明します。

HTML でのテキストの移動に関するガイド。ここでは、概要、マーキー タグが構文でどのように機能するか、および実装例について説明します。

HTML オンクリック ボタンのガイド。ここでは、それらの紹介、動作、例、およびさまざまなイベントでの onclick イベントについてそれぞれ説明します。
