php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.01.2012, 19:59  
Benutzer
 
Registriert seit: 11.11.2009
Beiträge: 33
PHP-Kenntnisse:
Anfänger
the_fan befindet sich auf einem aufstrebenden Ast
Standard Weiterlesen-Link durch HTML behindert

Hallo,

möchte für meine News einen "Weiterlesen"-Link einbauen.
Bisher bin ich damit auch ganz gut zurecht gekommen.

PHP-Code:
function cutText($string$length) {
  if (
strlen($string) > $length) {
    
$string substr($string0$length);
    
$string substr($string0strrpos($string' ')) . '&nbsp;<a href="?site=news&id='.$id.'" class="gfxi">...mehr</a>';
  }
  return 
$string;

Der String wird also nicht nach einer Anzahl X Zeichen abgeschnitten, sondern nach dem letzten Wort, das nach den X Zeichen folgt.

Das Problem ist nun, dass im Text auch HTML-Tags sind wie z.B. <b>...</b> oder <a href="">...</a>.

Wie bekomme ich es hin, dass das Script, sollte es einen öffnenden Tag finden, erst nach dem schließenden Tag abschneidet?
Habe mir überlegt mit regulären Ausdrücken eine Suche zu starten. Allerdings blicke ich da noch nicht ganz durch

Jemand eine Idee?

Danke!
Gruß
Stefan
the_fan ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.01.2012, 20:02  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Die einzig verlässliche Methode, mit HTML-Daten zu hantieren, ist die DOM-API zu nutzen: http://de2.php.net/manual/en/book.dom.php

Zitat:
Habe mir überlegt mit regulären Ausdrücken eine Suche zu starten. Allerdings blicke ich da noch nicht ganz durch
Keine Sorge, HTML lässt sich mit regulären Ausdrücken auch gar nicht parsen.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 24.01.2012, 20:08  
Benutzer
 
Registriert seit: 11.11.2009
Beiträge: 33
PHP-Kenntnisse:
Anfänger
the_fan befindet sich auf einem aufstrebenden Ast
Standard

Ohje, das ist ja garnix für mich. Da steige ich ja mit meinen bescheidenen Kentnissen überhaupt nicht durch.

Trotzdem Danke!!

Gruß
Stefan
the_fan ist offline   Mit Zitat antworten
Alt 24.01.2012, 21:22  
Benutzer
 
Registriert seit: 11.11.2009
Beiträge: 33
PHP-Kenntnisse:
Anfänger
the_fan befindet sich auf einem aufstrebenden Ast
Standard

Also was ich bisher geschafft habe:

PHP-Code:
error_reporting(E_ALL);
ini_set('display_errors'1);

$text "Hallo, das10 ist <b>ein kleine30r</b> Test, bei dem circa <i>6050</i> Zeichen vorkommen.86";

function 
cutText($string$zeichen){
  
ereg("<\/[a-z]{1}>",$string,$fund);
  
$tues substr(strrpos($string$fund[0]), 0$zeichen) . "&nbsp;<a href='#'>...mehr</a>";
  return 
$tues;
}

echo 
$text."<br><br>";
echo 
cutText($text80)

?> 
Ich finde immerhin heraus, dass es bis zum ersten schließenden Tag 33 Zeichen sind.
the_fan ist offline   Mit Zitat antworten
Alt 24.01.2012, 22:05  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Es bringt dir überhaupt nichts, denn du weiß nicht, wofür es das schließende Tag ist.
Wie gesagt: arbeite dich in die DOM-Funktionen ein oder strippe vorher alle HTML-Tags raus. Für die DOM-API gibt es auch viele Tutorials im Internet. Einfach mal googlen.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 25.01.2012, 08:39  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Oder du wendest einfach strip_tags auf den zu beschneidenen Text an.
__________________
dsentker ist offline   Mit Zitat antworten
Alt 25.01.2012, 10:09  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

1. ereg-Funktionen sind deprecated, nutze preg_*-Funktionen stattdessen!
2. Möglicher Aufbau müsste in etwa so aussehen:
PHP-Code:
preg_match_all'/(?<=\>)([^\>]+)(?=\<)/is'$htmlContent$matched );
$result array_filter$matched[0], 'trim' ); 
3. strip_tags() ist hier deutlich effizienter, liefert allerdings den gesamten Quelltext als einen String, womit dieser schlecht modifizierbar wäre, falls erforderlich.
4. DomDocument etc. ist imho wohl die beste Alternative hier.

Ausserdem verstehe ich nicht, warum Du Dir RegEx antun willst, aber meinst Dom wäre Dir noch ne Nummer zu hoch...
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein

Geändert von Arne Drews (25.01.2012 um 10:13 Uhr).
Arne Drews ist offline   Mit Zitat antworten
Alt 25.01.2012, 11:57  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Zitat:
Ausserdem verstehe ich nicht, warum Du Dir RegEx antun willst, aber meinst Dom wäre Dir noch ne Nummer zu hoch...
Vor allem, wenn du mal ein bisschen JavaScript gemacht hast (also richtiges Bare-Metal-JavaScript meine ich, kein jQuery), wird dir das alles bekannt vorkommen. Es ist im Grund nichts anderes. Sogar die Methoden heißen gleich, da alle DOM-Implementierungen der offiziellen DOM-Spezifikation folgen.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Alt 25.01.2012, 12:23  
Erfahrener Benutzer
 
Benutzerbild von jspit
 
Registriert seit: 19.08.2011
Beiträge: 701
PHP-Kenntnisse:
Anfänger
jspit wird schon bald berühmt werden
Standard

Mir stellt sich die Frage, ob es sinnvoll ist, alle HTML-Elemente zuzulassen. Der 2.Parameter von strip_tags gestattet Ausnahmen vom strippen. Sinnvoll eingesetzt könnte es in Verbindung mit DOM zu akzeptablen Ergebnissen führen.
jspit ist offline   Mit Zitat antworten
Alt 25.01.2012, 13:12  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.706
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Wieso nicht? Sofern der entsprechende Content nur von vertrauenswürdigen Personen wie Admins oder Redakteuren eingestellt wird, spricht nichts dagegen.
Ansonsten hilft auch strip_tags() mit definierten Ausnahmen nicht gegen XSS. Entweder du strippst mit der Funktion ALLE Tags oder du nutzt eine ordentliche Whitelist-Library wie HTML Purifier (http://htmlpurifier.org/).
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
HTML Link Formular autoausfüllen dfm HTML, Usability und Barrierefreiheit 2 08.08.2011 17:06
[Erledigt] Link Übergabe per $_GET['Variable'] vita PHP Tipps 2008 16 14.07.2008 15:19
Variable und komplette HTML Datei chrisonline PHP Tipps 2007 3 24.05.2007 15:30
benötige den HTML Code für die Bildgröße im Link mickschen HTML, Usability und Barrierefreiheit 2 05.06.2006 20:29
&amp;amp;amp;lt;if&amp;amp;amp;gt; &amp;amp;amp;lt;/if&amp;amp;amp;gt; in einer HTML Datei fuer Templ PHP-Fortgeschrittene 6 03.11.2005 12:05
PHP Link in einer HTML Datei ?! PHP Tipps 2005-2 10 20.10.2005 14:23
php Array in html link einbauen?? PHP Tipps 2005-2 6 09.10.2005 20:24
Daten aus MySQL-abfrage zum Link mit id zusammensetzen maccoder Datenbanken 2 13.09.2005 16:49
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
HTML: Iframe Link TRW HTML, Usability und Barrierefreiheit 2 15.12.2004 12:15
IMAP: Bild(er) in HTML Part richtig darstellen PHP-Fortgeschrittene 1 07.10.2004 12:21
absoluter link PHP Tipps 2004 10 01.07.2004 23:00
PHP Link ??? PHP Tipps 2004 4 25.06.2004 17:24
[Erledigt] PDF aus HTML erzeugen ? PHP-Fortgeschrittene 2 05.06.2004 02:10

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php weiterlesen-link, html behindert

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:37 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum