HTML-Text abschneiden, ohne Tags zu zerstören
Beim Abschneiden von Text, der HTML enthält, ist es wichtig sicherzustellen, dass Tags ordnungsgemäß gehandhabt werden, um ein Zerbrechen der Tags zu vermeiden Layout und Inhaltsfluss.
Das Problem:
In Bei herkömmlichen Methoden werden Tags in den abgeschnittenen Text eingefügt, was zu unvollständigen oder fehlerhaften Tags führt. Dies kann die Formatierung stören, verwirrende Inhalte erzeugen und möglicherweise Probleme mit der Tidy-Bereinigung auslösen.
Die Lösung:
Um dieses Problem zu beheben, ist es notwendig, den HTML-Code zu analysieren und Verfolgen Sie offene Tags. Durch das Schließen offener Tags vor dem Abschneiden des Textes kann die Tag-Integrität sichergestellt werden.
PHP-Implementierung:
Der folgende PHP-Code zeigt, wie man HTML-Text unter Beibehaltung des Tags abschneidet Struktur:
function printTruncated($maxLength, $html, $isUtf8=true) { // Initialization $printedLength = 0; $position = 0; $tags = array(); // Regex pattern for matching HTML tags and entities $re = $isUtf8 ? '{</?([a-z]+)[^>]*>|&#?[a-zA-Z0-9]+;|[\x80-\xFF][\x80-\xBF]*}' : '{</?([a-z]+)[^>]*>|&#?[a-zA-Z0-9]+;}'; // Iterate through the HTML while ($printedLength < $maxLength && preg_match($re, $html, $match, PREG_OFFSET_CAPTURE, $position)) { // Extract tag and tag position list($tag, $tagPosition) = $match[0]; // Print text leading up to the tag $str = substr($html, $position, $tagPosition - $position); $printedLength += strlen($str); // Handle the tag if ($tag[0] == '&' || ord($tag) >= 0x80) { // Pass entity or UTF-8 sequence unchanged print($tag); $printedLength++; } else { if ($tag[1] == '/') { // Closing tag assert(array_pop($tags) == $match[1][0]); // Check for nested tags print($tag); } else if ($tag[strlen($tag) - 2] == '/') { // Self-closing tag print($tag); } else { // Opening tag print($tag); $tags[] = $match[1][0]; } } // Continue after the tag $position = $tagPosition + strlen($tag); } // Print any remaining text if ($position < strlen($html)) print(substr($html, $position, $maxLength - $printedLength)); // Close open tags while (!empty($tags)) printf('</%s>', array_pop($tags)); }
Verwendung:
printTruncated(10, '<b>&lt;Hello&gt;</b> <img src="world.png" alt="" /> world!'); print("\n"); printTruncated(10, '<table><tr><td>Heck, </td><td>throw</td></tr><tr><td>in a</td><td>table</td></tr></table>'); print("\n"); printTruncated(10, "<em><b>Hello</b>&#20;w\xC3\xB8rld!</em>"); print("\n");
Das obige ist der detaillierte Inhalt vonWie schneide ich HTML-Text ab, ohne Tags zu beschädigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!