Heim php教程 PHP开发 Implementierungscode für das Abfangen von PHP-HTML-Codezeichenfolgen

Implementierungscode für das Abfangen von PHP-HTML-Codezeichenfolgen

Dec 14, 2016 pm 01:19 PM

Und die angegebenen Daten sind eine HTML-Codezeichenfolge wie diese:

müssen Sie den Inhalt im div-Tag abfangen, das HTML-Tag behalten und nur den darin enthaltenen Text verarbeiten. Beispielsweise kann es sein, dass ich einfach das Wort „李“ in „李思“ abfange, aber wenn ich es auf diese Weise am Frontend einfüge, wird das Tag „a“ vor „李思“ nicht geschlossen, sodass ich nach dem Abfangen Sie müssen sicherstellen, dass die HTML-Syntax korrekt ist.

Dieses Problem ist wirklich nicht einfach zu lösen und es hat mich zwei Tage lang deprimiert. Bitte beachten Sie, dass es sich lediglich um eine Zeichenfolge handelt, der Inhalt jedoch HTML-Code ist und kein DOM vorhanden ist. Es wäre einfacher, wenn es am Frontend verarbeitet würde. Sie können das DOM direkt abrufen, dann die Knoten darin verarbeiten und schließlich Dinge wie innerHTML ausgeben. Es funktioniert jetzt nicht, ich muss meine Meinung ändern. Die Idee meines Kollegen ist folgende:

Jedes Zeichen der Zeichenfolge durchlaufen. Legen Sie ein Tag fest und setzen Sie es auf 1, wenn es am Anfang des Tags auf das Tag < trifft. Die folgenden Zeichen werden nicht gezählt und beginnen dann mit der Zählung, nachdem sie auf > gestoßen sind. Wenn Sie die Zeichenfolge innerhalb des Etiketts verarbeiten, müssen Sie zunächst feststellen, ob die Codierung des aktuellen Zeichens chinesisch sein kann. Im Allgemeinen beträgt die Länge der UTF-8-codierten chinesischen Zeichen in PHP 3. Wenn Sie also auf eine chinesische Zeichencodierung stoßen, I Ich muss zwei ungezählte überspringen ... An diesem Punkt fängt mein Kopf an, groß zu werden. Persönlich finde ich diese Methode sehr unangenehm. Erstens ist diese Art von exquisiter Logik nicht einfach zu kontrollieren, und die Länge des unter UFT-8-Codierung generierten Chinesisch kann 3 oder 4 betragen, sodass die Dichtheit des Codes fraglich ist .

Meine persönliche Idee ist die Verwendung von Tidy (bitte beachten Sie das PHP-Handbuch für die spezifische Verwendung). Ich habe gestern Tidy studiert und festgestellt, dass dieses Ding sehr nützlich ist. Konvertieren Sie diesen String zunächst wie folgt in ein Tidy-Objekt:

$tidy = Tidy_parse_string($str, array(), 'utf8′); // Beachten Sie, dass dies der Fall ist ist utf8, nicht utf-8, es gibt keine mittlere Verbindung.

Dann holen Sie sich den Körper in $tidy (da $tidy nach der Konvertierung automatisch Tags wie hinzufügt):

$body = Tidy_get_body($tidy) ;

Zu diesem Zeitpunkt können Sie var_dump verwenden, um sich einige $body-Strukturen anzusehen, und Sie werden feststellen, dass jedes Tag in ein entsprechendes Objekt mit entsprechenden Attributen umgewandelt wird. Beispielsweise sind einige Attribute, die einer solchen Anweisung entsprechen, beispielsweise sdf:

name=>“a“
value => "sdf"
child=> array{[0]=>Ein Textknotenobjekt, Wert ist sdf}
attribute=array{"href ”=>“#“}
…..Andere Attribute

Wie Sie sehen können, können wir den Wert des Textknotens unter dem Knoten, der der a-Beschriftung entspricht, tatsächlich separat verarbeiten, sodass er wird nicht zerstört. Keine HTML-Integrität. Ursprünglich dachte ich, dass sich nach dem Ändern des Werts des Textknotens im a-Label auch der Wert des a-Labels entsprechend ändern würde. In diesem Fall wäre es in Ordnung, wenn ich direkt den Wert des dem a entsprechenden Knotens zurückgeben würde Leider habe ich nicht damit gerechnet, dass der Text darin verarbeitet wird. Dann müssen Sie den neuen HTML-Code noch selbst buchstabieren.

Nachdem Sie die Struktur des Tidy-Objekts kennen, ist alles einfach zu handhaben. Für diese Anforderung müssen Sie das div-Tag finden und dann mit der Verarbeitung der darin enthaltenen Knoten beginnen. Der Code lautet wie folgt:

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′);
}

Das darin enthaltene $subchild ist ein untergeordneter Knoten. Beachten Sie, dass hier mb_strwidth verwendet wird, um die Stringlänge zu erhalten. Ich empfehle dieses mb_strwidth dringend, es ist sehr nützlich, es behandelt Chinesisch als zwei Zeichen lang, was genau den Anforderungen hier entspricht! Darüber hinaus wird mb_strimwidth beim Abfangen von Zeichenfolgen verwendet. Diese Funktion behandelt auch chinesische Zeichen mit einer Länge von zwei Zeichen. Die mit mb_ beginnenden Funktionen sind wirklich einfach zu verwenden.

Ich werde den spezifischen Code nicht aufschreiben, da er auf der Grundlage einer Anforderung geschrieben wurde und nicht in eine universelle Form gebracht wurde. Eines Tages habe ich Zeit, es universell zu machen und zu veröffentlichen.

Außerdem ist es schade, dass FireFox das Text-Overflow-Attribut nicht unterstützt, sonst müsste man sich nicht so viel Mühe geben, es im Hintergrund abzuschneiden. Wenn Sie eine bessere Methode haben, können Sie eine Nachricht zur Diskussion hinterlassen. Weitere verwandte Artikel finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Tabellenrahmen in HTML Tabellenrahmen in HTML Sep 04, 2024 pm 04:49 PM

Anleitung zum Tabellenrahmen in HTML. Hier besprechen wir verschiedene Möglichkeiten zum Definieren von Tabellenrändern anhand von Beispielen für den Tabellenrand in HTML.

HTML-Rand links HTML-Rand links Sep 04, 2024 pm 04:48 PM

Anleitung zum HTML-Rand links. Hier besprechen wir einen kurzen Überblick über HTML margin-left und seine Beispiele sowie seine Code-Implementierung.

Verschachtelte Tabelle in HTML Verschachtelte Tabelle in HTML Sep 04, 2024 pm 04:49 PM

Dies ist eine Anleitung für verschachtelte Tabellen in HTML. Hier diskutieren wir anhand der entsprechenden Beispiele, wie man eine Tabelle innerhalb der Tabelle erstellt.

HTML-Tabellenlayout HTML-Tabellenlayout Sep 04, 2024 pm 04:54 PM

Leitfaden zum HTML-Tabellenlayout. Hier besprechen wir die Werte des HTML-Tabellenlayouts zusammen mit den Beispielen und Ausgaben im Detail.

HTML-Eingabeplatzhalter HTML-Eingabeplatzhalter Sep 04, 2024 pm 04:54 PM

Leitfaden für HTML-Eingabeplatzhalter. Hier besprechen wir die Beispiele für HTML-Eingabeplatzhalter zusammen mit den Codes und Ausgaben.

HTML-geordnete Liste HTML-geordnete Liste Sep 04, 2024 pm 04:43 PM

Leitfaden zur HTML-geordneten Liste. Hier besprechen wir auch die Einführung von HTML-geordneten Listen und Typen sowie deren Beispiele

Text in HTML verschieben Text in HTML verschieben Sep 04, 2024 pm 04:45 PM

Anleitung zum Verschieben von Text in HTML. Hier besprechen wir eine Einführung, wie Marquee-Tags funktionieren, mit Syntax und Beispielen für die Implementierung.

HTML-Onclick-Button HTML-Onclick-Button Sep 04, 2024 pm 04:49 PM

Anleitung zum HTML-OnClick-Button. Hier diskutieren wir deren Einführung, Funktionsweise, Beispiele und Onclick-Events in verschiedenen Veranstaltungen.

See all articles