Portal > Foren > PHP > PHP-Programmierung > preg_replace - Maskierten Sonderzeichen
Antwort
 
Themen-Optionen
Alt 29.09.2006, 08:36 Nach oben    #1
duderino
Gast
 
Beiträge: n/a
Standard preg_replace - Maskierten Sonderzeichen

Hallo zusammen, habe dieses Problem jetzt schon in 2 verschiedenen Foren gepostet. Leider konnte mir niemand helfen, darum versuch ich mein Glück jetzt mal hier.

Folgende Situation: Ich habe ein Array mit verschiedenen Begriffen. Mit der preg_replace-Funktion möchte ich nun einen Text nach dem Vorkommen dieser Begriffe durchsuchen. Falls ein Begriff gefunden wird, gibt es ein anderes Array, das die zu ersetzenden Begriffe enthält.

PHP-Code:
//So wird der Begriff in ein Array geschrieben
$suchmuster[] = "/\b".$begriff."\b/"
So werden die Begriffe in das Array geschrieben. Es sollen nur ganze Worte gefunden werden, keine Teile.

Habe jetzt das Problem dass maskierte HTML Zeichen nicht in dieser Funktion erkannt werden. Wenn ich Begriffe OHNE Sonderzeichen habe, funktioniert alles perfekt. Kommt allerdings ein § oder ein & dazu, kann die Funktion anscheinend nicht mehr erkennen ob ein Wort auch so im Text vorkommt. Der Titel und auch der Text werden vorher mit htmlentities(); konvertiert.

preg_replace sieht so aus:
PHP-Code:
preg_replace($suchmuster$ersetzungen$text); 
Hoffe ihr könnt mir helfen.

Grüße
duderino

Geändert von duderino (29.09.2006 um 08:45 Uhr).
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.09.2006, 08:42 Nach oben    #2
axo
Gast
 
Beiträge: n/a
Standard

dann bekommst du den grund, warum du keine antwort bekommst, eben hier:

du hast keine frage gestellt.
überdenke mal bitte objektiv dein posting.

grüße
axo
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.09.2006, 08:47 Nach oben    #3
duderino
Gast
 
Beiträge: n/a
Standard

Ok, tut mir leid. Wieso werden nicht auch die Wörter die maskierte HTML Sonderzeichen enthalten ersetzt?
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.09.2006, 09:35 Nach oben    #4
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

Zitat:
Zitat von duderino Beitrag anzeigen
Ok, tut mir leid. Wieso werden nicht auch die Wörter die maskierte HTML Sonderzeichen enthalten ersetzt?

woher soll der regex das wissen ? regex sprechen kein html, sondern tun das was ihnen der Programmierer sagt.

eine möglichkeit wäre z.b. das array zu kopieren, nochmal durch ne foreach-schleife zu jagen, mittels htmlentities jedes element in die sonderzeichen umschreiben und dann an das erste array hintedranhängen bevor preg_replace läuft, allerdings solltest du der sauberkeit halber, weil man nie weis was für zeichen in deinen "strings" drin sind vieleicht mal beim hinzufügen neuer worte auch preg_quote nutzen. Sonst kannste schnell einen regex ham der entweder einen Fehler bringt, oder aber nicht sauber ersetzt wird.

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.09.2006, 09:46 Nach oben    #5
duderino
Gast
 
Beiträge: n/a
Standard

Klar das regex kein HTML kann. Aber ich habe ja in beiden Variablen (Begriffe und Texte) die gleichen maskierten Zeichen. Bin davon ausgegangen dass die Zeichen trotzdem als gleich erkannt werden, auch wenn sie schon maskiert sind. Die Zeichenreihenfolge ist ja in beiden Fällen gleich.

Das mit preg_quote(); werde ich mal ausprobieren. Allerdings sind die Sonderzeichen & oder § ja keine Zeichen die von dieser Funktion berücksichtigt werden, oder?

Grüße
duderino

PS: Es funktioniert auch nicht wenn z.B. die ä,ö,ü in der Zeichenkette maskiert stehen.

Geändert von duderino (29.09.2006 um 09:49 Uhr).
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.09.2006, 18:59 Nach oben    #6
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

wie wäre es mal mit nem kontreten beispielcode ? wo beide arrays mit den werten gefüllt werden die problematisch sind, dann ersetzt wird und am ende das resultat ausgegeben wird ?

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.09.2006, 19:36 Nach oben    #7
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 521
Standard

Zitat:
Zitat von duderino Beitrag anzeigen
Habe jetzt das Problem dass maskierte HTML Zeichen nicht in dieser Funktion erkannt werden. Wenn ich Begriffe OHNE Sonderzeichen habe, funktioniert alles perfekt. Kommt allerdings ein § oder ein & dazu, kann die Funktion anscheinend nicht mehr erkennen ob ein Wort auch so im Text vorkommt. Der Titel und auch der Text werden vorher mit htmlentities(); konvertiert.
also dann wird das problem daher rühren, dass die sonderzeichen durch html-entities ersetzt werden und daher ein semikolon eingefügt wird, das dann als wortgrenze erkannt wird.
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.10.2006, 20:07 Nach oben    #8
duderino
Gast
 
Beiträge: n/a
Standard

Hier die Funktion die die Wörter durch Links ersetzen soll:

PHP-Code:
function autoLinks($id) {

    global 
$db;

    
//Stammdaten aus der DB aufrufen
    
$stammdaten $db->fetch_array($db->query("SELECT id, text FROM content WHERE id = ".$id.""));
    
    
//Entferne automatisch vergebene Links aus dem Text
    //$stammdaten["text"] = preg_replace('#<a href=".*" title=".* \(Autolink\)">(.*)</a>#Uis', '$1', $stammdaten["text"]); 

    
if(USE_AUTOLINKING == 1) {
        
        
$query $db->query("SELECT id, titel, h1 FROM content WHERE status = 1 AND is_kat = 0");
            
        while(
$fetch $db->fetch_array($query)) {
            
            
//Entferne Links mit der gleichen ID (gleiche Inhalte)    
            
if($fetch["id"] !== $id){
                
                
//Suche nur Zeichenketten die länger als 3 Zeichen sind
                
if(strlen($fetch["titel"]) > 3) {
                
                    
$suchmuster[] = '/\b'.preg_quote($fetch["titel"]).'\b/';
                    
$ersetzungen[] =  '<a href="'.mklink($fetch["id"]).'" title="'.$fetch["h1"].'">'.$fetch["titel"].'</a>';
                }
            }
        }
     
        
//Ausdrücke ersetzen
        
return preg_replace($suchmuster$ersetzungen$stammdaten["text"]);    
    }
    else {
        
        return 
$stammdaten["text"];
    }

 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


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

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 aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Tabelle mit Sonderzeichen löschen Neq' Datenbanken 1 28.11.2006 21:27
Deutsche Sonderzeichen in Unicode `B Allgemeine Java-Programmierung 2 21.02.2005 22:38


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:27 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44