SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 20.04.2004, 17:37:27
norial norial ist offline
Anfänger
 
Registriert seit: Sep 2003
Beiträge: 10
Suchen/Ersetzen: Alles erstzen nur nicht in HTML Tags

Hallo,

in einem HTML Text $text ersetze ich mit:

PHP-Code:
function highlight($text,$words) {      
$words split(':',$words); // Übergabe wort1:wort2...      $color=array("6666ff","BDB76B","90EE90","FA8072","EE82EE","9ACD3","ADD8E6"); // 7 Farben müssen reichen      
for($i 0$i sizeof($words); $i++) {          
$text=preg_replace ("/$words[$i]/is""%öüöäßüäö%#".$color[$i]."'>%äöüßüöä%"$text); // erst mit dummies ersetzen - verhindert mehrfach Ersetzungen     
}  
    
$text=preg_replace ("/%öüöäßüäö%#/is""<span style='background-color: #"$text); // dummies austauschen      $text=preg_replace ("/%äöüßüöä%/is", "</span>", $text); 
     
return $text;  } 
alle Wörter in $words mit <span>Word</span> zum Hervorheben.
Leider kann es vorkommen, dass Links o.ä. zerstört werden.
Bsp:
PHP-Code:
Beispieltext <a href='http://diesisteinBeispiellink.de'>test</a
Wenn ich 'ein' ersetze zerstöre ich den Link und es kommt raus.
PHP-Code:
Beispieltext <a href='http://diesist<span>ein</span>Beispiellink.de'>test</a
Hat jemand eine elegante Lösung, wie ich solche Ersetzungen verhindere.

Grüße und danke
Mit Zitat antworten
  #2  
Alt 21.04.2004, 22:39:10
Benutzerbild von Beamer
Beamer Beamer ist offline
Anfänger
 
Registriert seit: May 2002
Beiträge: 32
Beamer eine Nachricht über ICQ schicken
Elegant nicht gerade, aber etwas getrickst:

Du erstellt eine eigene Suchen/Ersetzen-Funktion. Dabei durchsuchst du den String von Anfang an, Zeichen für Zeichen. Triffst du auf ein HTML-Tag, setzt du einen Zähler hoch bzw. auch wieder runter. Nur wenn der Zähler auf 0 ist, sich der gesuchte Text also außerhalb eines HTML-Tags befindet, darf ersetzt werden. Das setzt natürlich einen sauberen HTML-Code voraus. (Achte auch auf Tags ohne Abschluss-Tag wie <br>.)


Übrigens: Für deine Ersetzen-Version hätte es auch die Funktion strtr getan. Du hättest ein Array mit Elementen der Form "Wort1" => "<span ...>Wort1</span>" aufgebaut und mit strtr auf einmal ersetzt. Aber wie gesagt, ist nur eine Alternative zu deinem und löst nicht das "HTML-Problem".
__________________
Beamer

Computers are like air conditioners - They work properly unless you open Windows.
Mit Zitat antworten
  #3  
Alt 22.04.2004, 10:29:38
Progman Progman ist offline
Member
 
Registriert seit: Apr 2002
Beiträge: 821
Progman eine Nachricht über ICQ schicken
8.11. Wie ersetze ich in einem Text, jedoch nicht innerhalb von HTML-Tags?
http://www.dclp-faq.de/q/q-regexp-ersetzen.html
__________________
PHP-Tutorial - PHP-FAQ - PHP-Manual
HTMLWiki
Mit Zitat antworten
  #4  
Alt 11.03.2011, 17:30:21
reincom.de reincom.de ist offline
Anfänger
 
Registriert seit: Mar 2011
Ort: Warburg
Alter: 55
Beiträge: 1
AW: Suchen/Ersetzen: Alles erstzen nur nicht in HTML Tags

Hallo Leute,

ich hoffe ihr könnt mir helfen, leider komme ich nicht weiter.

Um bestimmte Wörter in einem Text zu ersetzen, durchläuft eine Schleife einzeln alle Schlüsselwörter und ersetzt diese gegebenenfalls mit folgendem Code-Fragment:

$text = preg_replace("/{$row->keyword}/", "<b>{$row->keyword}</b>", $text, 1);

Dies macht im Prinzip genau das was es soll, nur wenn ein Link im Text vorkommt, wird dieser LEIDER auch ersetzt.

Nun habe ich folgenden Code im Internet und hier gefunden:

preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"<b>\1</b>"', $t);

Jetzt wird zwar der Link nicht mehr ersetzt, aber es kommt zu:

<b>LAN</b>, <b>MAN</b>, <b>WAN</b>, <b>W<b>LAN</b></b>

Was ich nicht verstehe ist:
  1. <b> müsste doch auch mit (<[^>]*) abgefangen werden.
  2. Es werden nun alle Vorkommen ersetzt. Es sollte aber nur das 1. Vorkommen ersetzt werden, was ich mit der 1 am Ende meines preg_replace erreicht habe. Bei eurer Variante kommt es zu keiner Ausgabe mehr.
  3. Wie kann ich es richtig machen?


PHP-Code:
/**
 * Der übergebene Text wird nach Keywords durchsucht und gegebenenfalls
 * mit den HTML-Tags "abbr" bzw. "acronym" erweitert.
 *
 * @param string $text
 * @return string
 */
public function parse($text) {
    
$sql sprintf("SELECT keyword, abbr, title
        FROM %s WHERE activ=1 ORDER BY keyword DESC"
,
            
$this->_tablename
    
);
    
$result $this->_db->query($sql);

    if (
true == $result && $result->num_rows >= 1) {
        while (
$row $result->fetch_object()) {
            if (
true == $row->abbr) {
                
$replacement '<abbr title="' $row->title '">'.$row->keyword.'</abbr>';
            } else {
                
$replacement '<acronym title="' $row->title '">'.$row->keyword.'</acronym>';
            }
            
// Hyperlinks werden LEIDER mit ersetzt
            //$text = preg_replace("/{$row->keyword}/", $replacement, $text, 1);

            // Quelle: http://www.php-faq.de/q-regexp-ersetzen.html
            
$text preg_replace("/((<[^>]*)|{$row->keyword})/e"'"\2"=="\1"? "\1":"$replacement"'$text);
        }
        
$result->close();
    }
    return 
$text;

Vielen Dank für eure Hilfe.

Andreas
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:58:45 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt