PHP HTML インターセプト コードの実装方法について詳しく説明します_PHP チュートリアル
今日紹介するのは の要件です。特定の物理的な長さのテキストをインターセプトし、それを表示します。インターセプトされるのは、UFT-8 でエンコードされた文字列のバイト数ではないことに注意してください。漢字は 3 文字または 4 バイト表示されますが、全角の場合は 1 文字のみ表示されます。
そして、与えられたデータは、次のような HTML コード文字列です:
<ol class="dp-xml"> <li class="alt"><span><span class="tag"><</span><span> </span><span class="tag-name">div</span><span> </span><span class="attribute">class</span><span>=”aaa”</span><span class="tag">></span></span></li> <li class="alt"><span><span class="tag"><</span><span> </span><span class="tag-name">a</span><span> </span><span class="attribute">href</span><span>=”/aaa.php?</span><span class="attribute">id</span><span>=</span><span class="attribute-value">1</span><span>″</span><span class="tag">></span></span></li> <li class="alt"><span><span>张三</span></span></li> <li class="alt"><span><span class="tag"><</span><span> /a</span><span class="tag">></span><span> </span></span></li> <li class="alt"><span><span>评论了 </span></span></li> <li class="alt"><span><span class="tag"><</span><span> </span><span class="tag-name">a</span><span> </span><span class="attribute">href</span><span>=”/aaa.php?</span><span class="attribute">id</span><span>=</span><span class="attribute-value">444</span><span>″</span><span class="tag">></span></span></li> <li class="alt"><span><span>李四</span></span></li> <li class="alt"><span><span class="tag"><</span><span> /a</span><span class="tag">></span><span> </span></span></li> <li class="alt"><span><span>分享的 </span></span></li> <li class="alt"><span><span class="tag"><</span><span> </span><span class="tag-name">a</span><span> </span><span class="attribute">href</span><span>=”bbb.html”</span><span class="tag">></span></span></li> <li class="alt"><span><span>一篇文章文章一长串的东西</span></span></li> <li class="alt"><span><span class="tag"><</span><span> /a</span><span class="tag">></span></span></li> <li class="alt"><span><span class="tag"><</span><span> /div</span><span class="tag">></span><span> </span></span></li> </ol>
PHP HTML コードをインターセプトするときは、div タグ内のコンテンツをインターセプトし、HTML タグを保持し、その中のテキストのみを処理する必要があります。 。たとえば、「李思」の「李」という単語をインターセプトするだけかもしれませんが、このようにフロントエンドに置くと、「李思」の前の a タグが閉じられないので、インターセプト後に、 HTML 構文が正しいことを確認する必要があります。
この問題は本当に解決するのが簡単ではありません。私は二日間憂鬱になりました。これは単なる文字列ですが、内容は HTML コードであり、DOM がないことに注意してください。フロントエンドで処理できれば、DOM を直接取得して内部のノードを処理し、最終的に innerHTML などを出力することができます。今はうまくいかないので、考えを変えなければなりません。同僚のアイデアは次のとおりです:
文字列の各文字をトラバースします。タグを設定し、タグの先頭で < タグが見つかった場合は 1 に設定し、その後の文字はカウントされません。ラベル内の文字列を処理するときは、まず現在の文字エンコーディングが中国語であるかどうかを判断する必要があります。一般に、PHP で UTF-8 でエンコードされた中国語の文字の長さは 3 です。したがって、中国語の文字エンコーディングが見つかった場合は、次のようにする必要があります。カウントされていないものを 2 つスキップします... この時点で、私の頭は大きくなり始めています。個人的には、この方法は非常に不快だと思います。まず、この種の絶妙なロジックを制御するのは簡単ではありません。また、UFT-8 エンコーディングで生成される中国語の長さは 3 または 4 になる可能性があるため、コードの厳密さには疑問があります。 。
私の個人的なアイデアは、Tidy を使用することです (具体的な使用方法については、PHP マニュアルを参照してください)。昨日Tidyについて勉強したところ、これがとても便利であることがわかりました。まず、この文字列を次のように Tidy オブジェクトに変換します:
<ol class="dp-xml"><li class="alt"><span><span>$</span><span class="attribute">tidy</span><span> = </span><span class="attribute-value">tidy_parse_string<br /></span><span>($str, array(), ‘utf8′); </span></span></li><li><span>// 最后一个是设置编码的,注意,<br />这里是utf8 ,不是utf-8,没有中间那个连线。 </span></li></ol>
次に、$tidy で本文を取得します (変換後、$tidy は
などのタグを自動的に追加するため):$body = tiny_get_body ($tidy);
この時点で、var_dump を使用して $body 構造体を確認すると、各タグが対応する属性を持つ対応するオブジェクトに変換されることがわかります。たとえば、sdf などのステートメントに対応する属性は次のとおりです。
name=>”a”
value => “sdf”
child=>array{[0]=>テキストノードオブジェクト、値は sdf}
attribute=array{”href”=>”#”}
… .. その他の属性
実際に、a タグの対応するノードの下にあるテキスト ノードの値を個別に処理できるので、PHP HTML インターセプト コードが HTML の整合性を破壊しないことがわかります。当初は、aラベルのテキストノードの値を変更すると、それに合わせてaラベルの値も変更されると考えていましたが、その場合はaに対応するノードの値を直接返せばOKです。残念ながら、そのようなものになるとは予想していなかったので、その中のテキストを自分で記述する必要がありました。
Tidy オブジェクトの構造を理解した後は、すべてのノードを走査するだけで、div タグを見つけて内部のノードの処理を開始することができます。コードは次のとおりです。
<ol class="dp-xml"> <li class="alt"><span><span>if(mb_strwidth($subchild-</span><span class="tag">></span><span>value, <br>‘utf-8′) </span><span class="tag">></span><span>= $len) </span></span></li> <li><span>{ </span></li> <li class="alt"> <span>$subchild-</span><span class="tag">></span><span class="attribute">value</span><span> = </span><span class="attribute-value">mb_strimwidth<br></span><span>($subchild-</span><span class="tag">></span><span>value, 0, $len, ‘…', ‘utf-8′); </span> </li> <li> <span>$trimed_str </span><span class="attribute">.</span><span>= $subchild-</span><span class="tag">></span><span>value; </span> </li> <li class="alt"><span>break; </span></li> <li><span>} </span></li> <li class="alt"><span>else </span></li> <li><span>{ </span></li> <li class="alt"> <span>$trimed_str </span><span class="attribute">.</span><span>= $subchild-</span><span class="tag">></span><span>value; </span> </li> <li> <span>$</span><span class="attribute">len</span><span> = $len - mb_strwidth($subchild-</span><span class="tag">><br></span><span>value, ‘utf-8′); </span> </li> <li class="alt"><span>} </span></li> </ol>
の $subchild は子ノードです。ここでは、文字列の長さを取得するために mb_strwidth が使用されていることに注意してください。この mb_strwidth を強くお勧めします。これは非常に便利です。中国語を長さ 2 文字として扱い、ここでのニーズを正確に満たします。さらに、mb_strimwidth は、PHP HTML がコードをインターセプトするときにも使用されます。この関数は、中国語を 2 文字の長さとして扱います。この関数は非常に使いやすいです。
具体的な PHP HTML インターセプト コードは書きません。これは要件に基づいて記述されており、汎用的な形式に作られていないためです。いつかそれを普遍的なものにして公開する時間ができました。
さらに、FireFox が text-overflow 属性をサポートしていないのは残念です。サポートしていなければ、バックグラウンドで懸命に処理してテキストを切り詰める必要はありません。もっと良い方法があれば、ぜひ提案してください!素晴らしい。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

ReactはJSXとHTMLを組み合わせてユーザーエクスペリエンスを向上させます。 1)JSXはHTMLを埋め込み、開発をより直感的にします。 2)仮想DOMメカニズムは、パフォーマンスを最適化し、DOM操作を削減します。 3)保守性を向上させるコンポーネントベースの管理UI。 4)国家管理とイベント処理は、インタラクティブ性を高めます。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。
