php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.02.2007, 18:56  
nfo
Neuer Benutzer
 
Benutzerbild von nfo
 
Registriert seit: 05.04.2008
Beiträge: 22
PHP-Kenntnisse:
Fortgeschritten
nfo befindet sich auf einem aufstrebenden Ast
nfo eine Nachricht über ICQ schicken nfo eine Nachricht über Skype™ schicken
Standard text kürzen = kein problem was is aber mit html

Hallo,

ich suche schon länger eine funktion mit der man ein html string kürzen kann...
bei reinen text ist das ja kein problem, nur wenn ich bsp. html kürzen will, kann das zu problemen führen i.e.
Es gibt ein Perl cpan modul HTML::Truncate das dies richtig macht und den endtag dran hängt um valides xhtml zu erzeugen.

Nun bräuchte ich so eine ähnliche funktion oder klasse für php, da ich leider kein perl geek bin, kann ich auch nicht den perl code portieren.



Vielen dank im vorraus

nfo
nfo ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 03.02.2007, 19:53  
Erfahrener Benutzer
 
Benutzerbild von dsmcg
 
Registriert seit: 11.10.2005
Beiträge: 2.405
dsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäredsmcg sorgt für eine eindrucksvolle Atmosphäre
Standard

?! ich versteh nicht wirklich was du genau machen willst?!

Mach mal am besten anhand eines Beispieles.
Wie ist der String zu erst? Wie nacher?
__________________
Wie man Fragen richtig stellt
dsmcg ist offline  
Alt 03.02.2007, 20:19  
Erfahrener Benutzer
 
Benutzerbild von DER_Brain
 
Registriert seit: 18.04.2005
Beiträge: 1.541
PHP-Kenntnisse:
Fortgeschritten
DER_Brain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich denke das lässt sich mit regex lösen...
DER_Brain ist offline  
Alt 03.02.2007, 20:22  
nfo
Neuer Benutzer
 
Benutzerbild von nfo
 
Registriert seit: 05.04.2008
Beiträge: 22
PHP-Kenntnisse:
Fortgeschritten
nfo befindet sich auf einem aufstrebenden Ast
nfo eine Nachricht über ICQ schicken nfo eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von dsmcg
?! ich versteh nicht wirklich was du genau machen willst?!
Also ich habe ein html string z.b

Code:
$content.= "<ul>[*]<a href=\"" . $item['link'] . "\" title=\"". $alttitle . "\">" . $item['title'] ."</a>[/list]";
der kommt nachdem er mit htmlentities codiert wird in die db.
soweit so gut.
jetzt kommt er an anderer stelle wieder raus wird decodiert und gekürzt (truncate)
was natürlich zu folge hat das einige tags nicht geschlossen werden ...

z.b.
Code:
<ul>[*]<a href=\"" . $item['link'] . "\" title=\"". $alttitle . "\">" . $item['title'] ."
hier fehlen nach der kürzung die end tags </a>[/list]
Um das ganz noch etwas schwieriger zu machen muss ich noch zufügen, dass der input nicht immer so aussieht, es können noch <img>, [b] tags und alles was xhtml/html so her gibt folgen, da der input teilweise vom user selbst erstellt wird....

so genug therorie hier das bsp link:
http://codejungle.is-a-geek.org/cms/

Hier kommen diverse rss feeds in die db und wie dir aufällt gibts einige
tags die nicht geschlossen werden aufgrund des oben beschriebenen problems.

?
nfo ist offline  
Alt 03.02.2007, 20:33  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo nfo,

lies dich mal auf der PHP.net-Seite zum Thema strip_tags() ein. Mir dieser Funktion lässt sich doch sicher was anfangen...


Grüße,
Dr.E.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 03.02.2007, 20:38  
nfo
Neuer Benutzer
 
Benutzerbild von nfo
 
Registriert seit: 05.04.2008
Beiträge: 22
PHP-Kenntnisse:
Fortgeschritten
nfo befindet sich auf einem aufstrebenden Ast
nfo eine Nachricht über ICQ schicken nfo eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von dr.e.
Hallo nfo,

lies dich mal auf der PHP.net-Seite zum Thema strip_tags() ein.
mit strip_tags kannst du html code aus einem string entfernen .. okay und dann weiter ?

ein freund hat ma geschrieben man könnte die bilder z.b. replacen mit einer art bb code versehen [img id=1] und die bei der ausgabe wieder replacen...
das sollte gehen, aber bei allen html tags scheint ma das nicht wirklich umsetzbar zu sein ....

zur zeit schaut die truncate funktion so aus (is natürlich nur bei reinen text brauchbar):
Code:
function truncate($text, $chars, $tolerance=3, $points=3) {
   $words = explode(" ",$text);
   $newstr = "";
   $i = 0;
   while(strlen($newstr)<=$chars &&
         strlen($newstr.$words[$i])<=($chars+$tolerance)) {
        $newstr .= $words[$i]." ";
        $i++;
   }
   $newstr .= str_repeat(".",$points);
   return $newstr;
}
nfo ist offline  
Alt 03.02.2007, 20:59  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Naja also wenn dus ganz perfekt machen willste, musste das HTML-Stück parsen, dann hast du ja Opener-Tokens, die einfach schließen.

Ansonsten würde ich evtl. mit strip_tags() arbeiten, diesen Text kürzen.
Dann weißt du an welcher Stelle du abschneiden musst.

Dann abschneiden und mit preg_match() alle <([a-z]+)(.*)> öffnenden Tags suchen. Alle schließenden auch noch mal, dann weißt du wieviele offen sind und noch zu schließen sind.

Und die dann einfach schließen.

Gut das ist jetzt schön daher gesagt, die Funktion ist wahrscheinlich schon etwas knifflig, aber ein Unding sollte es auch nicht sein.

Würde, bevor du dich dran machst, aber nochmal bei den User-Notes zu substr() oder strip_tags() vorbeischauen und nochmal kurz googlen. Das Problem ist ja auch nicht ganz neu, vielleicht findest du ja schon eine fertige Lösung.

Wenn ja poste sie doch grad hier mal, würde mich dann auch interessieren :P

PS: Willkommen im Forum
Zergling-new ist offline  
Alt 03.02.2007, 22:52  
nfo
Neuer Benutzer
 
Benutzerbild von nfo
 
Registriert seit: 05.04.2008
Beiträge: 22
PHP-Kenntnisse:
Fortgeschritten
nfo befindet sich auf einem aufstrebenden Ast
nfo eine Nachricht über ICQ schicken nfo eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Zergling
Naja also wenn dus ganz perfekt machen willste, musste das HTML-Stück parsen, dann hast du ja Opener-Tokens, die einfach schließen.
Klingt gut, ob das einfach wird is eine andere frage :wink:

also mit substr arbeiten (um den string zu kürzen) und dann schauen welche tags noch offen sind um diese zu schliessen klingt erstmal recht gut..
das wirft natürlich neue fragen auf, z.b. wie verhält sich das dann mit dem <table> tags...
ich trau mich fast wetten das das layout dann hin is...
also tables ignorieren beim substr


wenn ich das richtig sehe gibts jetzt zwei lösungs möglichkeiten für das prob:

1. HTML::Truncate von cpan portieren
2. Mit substr und preg_match arbeiten

wunder mich das ich da nix fertiges finde, will ja auch nicht das rad zweimal erfinden...

wenn ich eine fertige funktion hab poste ich das natürlich auch..

mfg

nfo

ps: danke, füll mich hier schon fast wie zuhause
ps2: als ich den text grad editiert hab, habe ich mir mal angeschaut was passiert wenn ich ein offen bbcode hinterlasse...
ergebniss phpbb scheint am ende meines text den tag zu schliessen
nfo ist offline  
Alt 04.02.2007, 00:04  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

zu verführerisch mich daran nicht mal zu probieren. unabhängig von performance gedanken hier mal eine idee:

PHP-Code:
<pre><?
$sText 
'Der schnelle <span>[b]braune[/b] Fuchs [img][/img]springt <u>über</u></span> den faulen Hund ';

$p xml_parser_create ();
xml_parser_set_option ($p XML_OPTION_CASE_FOLDING 0);
xml_parser_set_option ($p XML_OPTION_SKIP_WHITE 0);
xml_parse_into_struct ($p '<root>'.$sText.'</root>' $aVals);

$iLength 36;
foreach (
$aVals as $sKey => $aOptions)
  {
  if (
$iLength 0
    {
    
$aVals[$sKey]['value'] = substr (@ $aOptions['value'], $iLength);
    
$iLength $iLength strlen ($aVals[$sKey]['value']);
    
$sLastKey $sKey;
    continue;
    }
  unset (
$aVals[$sKey]);
  }

$aStack = array ();
reset ($aVals);
while (list (
$sKey $aOptions) = each ($aVals))
  {
  if (
$aOptions['type']=='open'array_unshift ($aStack $aOptions['tag']);
  if (
$aOptions['type']=='close'array_shift ($aStack);
  if (
$sKey == $sLastKey) break;
  }

print_r($aVals);
print_r($aStack);
$aVals enthält die öffnenden Tags + Inhalte, $aStack die schließenden in der richtigen Reihenfolge. Muß nur noch alles zusammengebastelt werden...
nikosch ist offline  
Alt 05.02.2007, 12:42  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

... hat schonmal jemand versucht die php highlight funktion auszuklamüsern
PHP-Code:
while (list ($sKey $aOptions) = each ($aVals))
  {
  if (
$aOptions['type']=='open'array_unshift ($aStack $aOptions['tag']);
  if (
$aOptions['type']=='close'array_shift ($aStack);
  if (
$sKey == $sLastKey) break;
  } 
... das öffnen und schließen von "tags" wie if ($boom == "headshot") { /**/ } ist ja auch kein klax ^^
__________________
"Nobody is as smart as everybody" - Kevin Kelly
— The best things in life aren't things
phpdummi ist offline  
 


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
Problem beim erstellen einer HTML Mail... GELight PHP Tipps 2006 15 06.10.2006 00:27
[Erledigt] Validation Problem - HTML Tags in Javascript HTML, Usability und Barrierefreiheit 7 06.03.2006 23:38
HTML Tags als Text ausgeben? cebe PHP Tipps 2006 1 03.03.2006 15:50
[Erledigt] Problem mit Sonderzeichen PHP -&gt; MySQL -&gt; HTML PHP Tipps 2007 18 07.12.2005 15:23
Hilfe bei regulärem Ausdruck (HTML Text Parsen) PHP Tipps 2005-2 4 04.08.2005 17:19
[Erledigt] Den Text von Html Seiten einlesen PHP Tipps 2005 5 29.03.2005 15:25
[Erledigt] DIV´s wollen nicht wie ich das will :-) HTML, Usability und Barrierefreiheit 22 28.03.2005 18:36
HTML und TEXT eMail Soese PHP Tipps 2005 1 17.02.2005 22:42
Problem bei Text Datei PHP Tipps 2005 7 24.01.2005 20:31
[Erledigt] Frage: Text abschneiden aber auf html tags achten PHP-Fortgeschrittene 1 19.01.2005 20:46
frames probleme HTML, Usability und Barrierefreiheit 6 18.01.2005 02:33
Problem mit htm bzw. html Dateien Server, Hosting und Workstations 7 15.10.2004 20:27
txt-Datei erstellen d-81 PHP Tipps 2004 12 11.08.2004 20:31
html text soll gleich erscheinen - das was php später PHP Tipps 2004 3 22.07.2004 08:07
Problem mit Text Kürzen :/ PHP Tipps 2004 10 12.06.2004 20:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
html text kürzen, html string kürzen, html text abschneiden, html string abschneiden, php html kürzen, php text kürzen html, php html text kürzen, text kürzen html, http://www.php.de/php-tipps-2007/43376-text-kuerzen-kein-problem-aber-mit-html.html, string abschneiden html, html kürzen, php html string kürzen, php html code kürzen, php text kürzen, perl text kürzen, html string schneiden, text kürzen mit html, html text abkürzen, html strings kürzen, php htmlstrings kürzen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:41 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.