kostenloser Webspace werbefrei: lima-city


[php] Abkürzungen & Akronyme ersetzten

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    ich wollte wissen, wie man am besten Abkürzungen und tag/akronym">Akronyme in einem Text mit HTML-Tags durch <abbr>...</abbr> bzw. <acronym>...</acronym> ersetzen kann.
    Ich habe bereits einiges versucht, z.B. HTML-Tags mit regulären Ausdrücken gefiltert und in den nicht-HTML-Bereichen die entsprechenden Wörter mit str_replace() ersetzt. Dies funktioniert zwar, aber das Problem liegt daran, dass eine Ausführung einer Seite ziehmlich lange dauert (1+ Sekunden).

    Jetzt wollte ich wissen, ob ihr vielleicht Ideen habt, wie man das besser machen könnte. Oder kennt sogar jemand ein Script, das dieses Problem löst bzw. genau das macht, was ich tun will?

    Ich würde mich auf Antworten freuen, danke.

    mfg,
    hr
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Also, du könntest das auch per JavaScript realisieren, dann hat der Client die ganze Rechenarbeit :biggrin:

    Wie sieht denn z.B. ein Textteil mit Abkürzungen aus?

    Wenn du bestimmte Tags überschreiben willst, dürfte das mit document.getElementsByTagName(); recht flott gehen.
  4. t*****b

    Normalerweise macht man das schon mit str_replace() oder ereg_replace(). Nur sind die Lima-City-Server allgemein etwas langsam, das muss nicht zwingend an deinem Script liegen (außer du hast es local ausprobiert).
  5. c*********c

    trueweb schrieb:
    Normalerweise macht man das schon mit str_replace() oder ereg_replace(). Nur sind die Lima-City-Server allgemein etwas langsam, das muss nicht zwingend an deinem Script liegen (außer du hast es local ausprobiert).


    Oder man verwendet anstelle der obsoleten (oder wie alopex es ausdrücken würde "arschlangsamen") ereg-Funktionen, die PCRE-Funktionen -> http://de.php.net/manual/de/ref.pcre.php

    Übrigens stehen die Bandbreite und die CPU-Belastung des Servers nicht zwingend im direkten Zusammenhang.
  6. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    bladehunter schrieb:
    [...]
    Wie sieht denn z.B. ein Textteil mit Abkürzungen aus?

    Naja, z.B.
    HTML ist sehr <b class="HTML-b">cool</b>,
    aber ich finde AJAX <u>besser</u>, obwohl PHP
    auch sehr praktisch ist.

    In diesem Text wird nun HTML durch <i><abbr title="Hypertext Markup Language">HTML</abbr></i> ersetzt, das selbe mit AJAX und PHP mit der entsprechenden Erklärung. Jetzt muss man natürlich darauf achten, dass das Akronym HTML im b-Tag nicht ersetzt wird.

    bladehunter schrieb:
    Wenn du bestimmte Tags überschreiben willst, dürfte das mit document.getElementsByTagName(); recht flott gehen.

    Das hilft ja nicht, die Abkürzungen müssen ja zuerst ersetzt werden.

    trueweb schrieb:
    Normalerweise macht man das schon mit str_replace() oder ereg_replace(). Nur sind die Lima-City-Server allgemein etwas langsam, das muss nicht zwingend an deinem Script liegen (außer du hast es local ausprobiert).

    Ich habe es lokal ausprobiert (leider).


    compactdisc schrieb:
    [...]
    Übrigens stehen die Bandbreite und die CPU-Belastung des Servers nicht zwingend im direkten Zusammenhang.

    Das ist mir schon klar, das Problem liegt nur daran, dass ich immer Webseiten sehe, bei denen das realisiert wird. Ich frag mich nur wie ...

    mfg,
    hr

    Beitrag geaendert: 11.3.2007 15:06:18 von heavyraptor
  7. Dir ist klar, dass PHP eine rekursive Abkürzung ist, die rein theoretisch in einer Endlosschleide endet ? :biggrin:

    Reggexe sind aber definitiv die beste Lösung dafür.
    Und ich würde dir empfehlen es in JS zu machen, da dies wirklich ne Menge Arbeit bedeutet für jede Abkürzung den Text zu durchsuchen.

    Und abgesehen davon, dürfte das JS immer noch schneller sein, als der lesende Besucher.
    Bis der Besucher sich fragt, was HTML eigentlich bedeutet, hat das Script den Tag schon längst eingebunden.
  8. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,

    bladehunter schrieb:
    Dir ist klar, dass PHP eine rekursive Abkürzung ist, die rein theoretisch in einer Endlosschleide endet ? :biggrin:

    Reggexe sind aber definitiv die beste Lösung dafür.
    Und ich würde dir empfehlen es in JS zu machen, da dies wirklich ne Menge Arbeit bedeutet für jede Abkürzung den Text zu durchsuchen.

    Und abgesehen davon, dürfte das JS immer noch schneller sein, als der lesende Besucher.
    Bis der Besucher sich fragt, was HTML eigentlich bedeutet, hat das Script den Tag schon längst eingebunden.

    Da hast du schon recht, der Punkt ist nur, dass ich es eigentlich mit PHP erledigen wollte ... :biggrin:.

    Am beste zeige ich hier mal mein Code, vielleicht findet hier ja jemand etwas, was man verbessern könnte. Ich selber weiss nicht, was man noch verbessern könnte, damit es schneller läuft - den Code könnte man eigentlich den "Akronym-Algorithmus" nennen :biggrin:.
    <?php
    function replace_shortcuts($html) {
      $shortcuts = array(
        'AJAX'  => 'Asynchronous JavaScript and XML',
        'HTML'  => 'Hyper Text Markup Language',
        'PHP'   => 'PHP: Hypertext Preprocessor'
        // usw ...
      );
    
      foreach ($shortcuts as $shortcut => $e)
        $shortcuts[$shortcut] = "<abbr title=\"$e\">$shortcut</abbr>";
    
      $frags = preg_split('/(<(?:[^<>]+(?:"[^"]*"|\'[^\']*\')?)+>)/',
    	         $html,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
    
      foreach ($frags as $key => $frag)
    	  if ($frag[0] != '<')
    		  $frags[$key] = str_replace(array_keys($shortcuts),array_values($shortcuts),$frag);
    
      return implode('',$frags);
    }
    ?>


    mfg,
    hr
  9. preg_replace('/>(.*?)[^<]\s'.$abkuerzung.'\s(.*?)</',$ausfuerlich,$string);

    Würde ich mal ganz spontan als einfache Alternative vorschlagen.
    (nicht getestet)

    edit: Kann gut sein, dass er bei einem Text wie
    <b>HTML ist cool. Ich mag HTML </b>
    nur das erste HTML ersetzt. Was im Falle vom rekursiven "PHP" vllt sogar günstiger ist.

    edit2: noch mal den reggex verbessert.

    Beitrag geaendert: 11.3.2007 16:36:38 von bladehunter
  10. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.

    Hi,


    preg_replace('/>(.*?)[^<]\s'.$abkuerzung.'\s(.*?)</',$ausfuerlich,$string);

    Würde ich mal ganz spontan als einfache Alternative vorschlagen.
    (nicht getestet)

    edit: Kann gut sein, dass er bei einem Text wie
    <b>HTML ist cool. Ich mag HTML </b>
    nur das erste HTML ersetzt. Was im Falle vom rekursiven "PHP" vllt sogar günstiger ist.

    edit2: noch mal den reggex verbessert.

    Beitrag geaendert: 11.3.2007 16:36:38 von bladehunter


    Hmm, ich überleg mir das mal... jedoch hat man dann problemen mit HTML-Tags wie z.B. <a href="#" id="<bla" onclick="foo('>')">.

    Danke trotzdem.

    mfg,
    hr
  11. Nicht direkt dazu, aber vielleicht eine Hilfe...

    bei HTML und PHP darauf achten, dass kein Punkt davor steht ;-)

    Kannst du das denn nicht per bbCode-Umwandlung realisieren?

    Außerdem gibt es Fehler beim IE (wo sonst *g*) bei der Umsetzung von ABBR, deshalb ein kleiner Tipp von mir

    function createAbbr ($strAbbr, $strAbbrTitle, $strAbbrCssId='', $strAbbrCssClass='', $strAbbrLanguage='')
    	{
    		// Einfache Funktion zur Erstellen von Abbr-Auszeichnungen, die auch mit dem Internet Explorer funktionieren
    		// <abbr>-Tag beinhaltet folgende Attribute:
    		// class; dir; id; lang; title
    		// style; wird nicht unterstützt
    		//
    		// Beispiel: <abbr title="World Wide Web Consortium" lang="en"><span class="abbr" title="World Wide Web Consortium">W3C</span></abbr>
    		
    		$strCreateAbbr   = '<abbr title="';
    		$strCreateAbbr	.= $strAbbrTitle;
    		$strCreateAbbr	.= '"';
    
    		if ($strAbbrCssId!='')
    		{
    			$strCreateAbbr	.= ' id="';
    			$strCreateAbbr	.= $strAbbrCssId;
    			$strCreateAbbr	.= '"';
    		}
    		
    		if ($strAbbrCssClass!='')
    		{
    			$strCreateAbbr	.= ' class="';
    			$strCreateAbbr	.= $strAbbrCssClass;
    			$strCreateAbbr	.= '"';
    		}
    		
    		if ($strAbbrLanguage!='')
    		{
    			$strCreateAbbr	.= ' lang="';
    			$strCreateAbbr	.= $strAbbrLanguage;
    			$strCreateAbbr	.= '" xml:lang="';
    			$strCreateAbbr	.= $strAbbrLanguage;
    			$strCreateAbbr	.= '" ';
    		}
    
    		$strCreateAbbr	.= '><span class="abbr" title="';
    		$strCreateAbbr	.= $strAbbrTitle;
    		$strCreateAbbr	.= '">';
    		$strCreateAbbr	.= $strAbbr;
    		$strCreateAbbr	.= '</span></abbr>';
    
    		return $strCreateAbbr;
    	}
  12. Autor dieses Themas

    heavyraptor

    heavyraptor hat kostenlosen Webspace.


    Nicht direkt dazu, aber vielleicht eine Hilfe...

    bei HTML und PHP darauf achten, dass kein Punkt davor steht ;-)

    Kannst du das denn nicht per bbCode-Umwandlung realisieren?
    [...]

    Das Problem habe ich ja so gelöst -.- ... mit regulären Ausdrücken.

    mfg,
    hr
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!