Antworten auf deine Fragen:
Neues Thema erstellen

Reguläre Ausdrücke HTML Tags ingnorieren

rey

Der Frager ;)

Hi,
ich arbeite an einer live suche, unterhalb der suche sollen dann die Zeichen wo ich eingebe rot dargestellt werden.
Ich dachte mir ich löse dies über einen Regulären Ausdruck.
Nun besteht aber das problem das html tags auch verändert werden, das würde ich aber gerne vermeiden denn
HTML:
<<font color="red">s</font>trong>...</strong>
Funktioniert nicht ;)
daher wollte ich fragen ob es eine Möglichkeit gibt diese innerhalb von preg_replace zu ignorieren
PHP:
preg_replace ("~".$suchkette."~","<font color='red'>".$suchkette."</font>",$ausgabe);
Striptags kann ich nicht verwenden weil die Text Formatierung erhalten bleiben soll.
 

jackykfm

ne pas se fouler

AW: Reguläre Ausdrücke HTML Tags ingnorieren

probiers mal damit:
<font color="red">s</font color><b>trong</b></font>
 

Silvio

Aktives Mitglied

AW: Reguläre Ausdrücke HTML Tags ingnorieren

probiers mal damit:
<font color="red">s</font color><b>trong</b></font>

Das ist doch generell falsch. Schau Dir mal den HTML-Code an, das ergibt doch gar keinen Sinn.

1. warum soll da 2mal font color stehen?
2. ist das strong scheinbar ausversehen geteilt worden
3. warum strong, wenn ich eh schon mit bold formatiert habe ? (außer ich möchte das strong als Klassen- oder ID-Zuweisung nutzen, was hier ja nicht der Fall ist)

Ohne zu wissen, wie Du die Variablen übergibst, würde ich folgenden HTML-Code (ziehe CSS vor) empfehlen:
HTML:
<font color="red"><strong>Text</strong></font>
 

Chickenshooter

Alter Mann

AW: Reguläre Ausdrücke HTML Tags ingnorieren

Moin

den font-Tag nimmt man nicht mehr um einzelne Textabschnitte zu formatieren nimm einen span Tag und dann mit css formatieren.

de.selfhtml.org
... Die hier beschriebenen HTML-Elemente (font-Tag) sind als deprecated eingestuft, das heißt, sie sollen in Zukunft aus dem HTML-Standard entfernt werden...

PHP:
<?php

    $suchText="test";
    
    $text="Hier machen wir Faxen mit dem Wort Test egal ob test klein oder groß ist, denn das steht hier nur so zum Testen in diesem sinnlosen Testsatz.";

    echo '<p>Suchtext:'.$suchText.'<br />Text:<br />'.$text.'</p>';
    
    $text = preg_replace('/('.$suchText.')/i','<span style="color:red; font-weight:bold;">$1</span>',$text);
    
    echo '<hr /><p>Text nach repalce:<br />'.$text.'</p>';

?>
MfG
 
Zuletzt bearbeitet:

rey

Der Frager ;)

AW: Reguläre Ausdrücke HTML Tags ignorieren

ne ihr versteht es nicht ;)
der text ist ein mit den ganzen formatierungen in einer text variable gespeichert.
wenn der such string "s" ist und ich diesen rot machen möchte wird auch das "s" aus dem strong tag genommen.
Das würde ich aber gern vermeiden ;)
 

Duddle

Posting-Frequenz: 14µHz

AW: Reguläre Ausdrücke HTML Tags ingnorieren

Um deine Frage zu beantworten: nein, solch eine Möglichkeit gibt es nicht frei Haus. Du solltest auch nie versuchen, HTML allgemein mit regulären Ausdrücken zu parsen (d.h. in der Struktur verstehen und darauf basierend Entscheidungen treffen). Das hat Ursachen in der theoretischen Informatik, aber das musst du nicht wissen.

Der einzig mir bekannte Weg, das Problem sauber zu lösen ist der Weg über ein DOM-Objekt, z.B. mit oder . Wenn du einen Baum deines Dokumentes (in deinem Fall der Ergebnis-String) hast kannst du über alle Kindelemente iterieren und dort jeweils den Text ersetzen.


Duddle
 

netbandit

Aktives Mitglied

AW: Reguläre Ausdrücke HTML Tags ingnorieren

Ich würde einfach versuchen nach dem ersten preg_replace die kaputten Tags zu reparieren; könnte in etwa so aussehen:

PHP:
<?php
error_reporting(E_ALL);
$suchkette='s';
$ersatz='<font color="red">' . $suchkette . '</font>';
$ausgabe='struvelpeter ist etwas zu <strong>fett</strong> geraten';
$ausgabe=preg_replace ('/' . preg_quote($suchkette, '/') . '/i', $ersatz ,$ausgabe);
$ausgabe=preg_replace ('/\<([^\<\>]*)(' . preg_quote($ersatz, '/') . ')([^\<\>]*)\>/i', '<\\1' . $suchkette . '\\3>' ,$ausgabe);
echo $ausgabe;
?>
Grüße :)
 
Zuletzt bearbeitet:

maba

Noch nicht viel geschrieben

AW: Reguläre Ausdrücke HTML Tags ingnorieren

Vielleicht habe ich das Problem nicht verstanden. Aber
das Ursprungs-HTML ist sicher syntaktisch total falsch weil ja das < mehrfach kommt. Hier würde htmlspecialchars(..) helfen, um das Ursprungs-HTML sauber zu bekommen.
<span class="redfont">&lt;und noch ein paar Buchstaben</span> hier dann der Rest (nicht rot) &gt;

Wenn man also zuerst
$suchkette_b = htmlspecialchars($suchkette);
macht, dann kann man hinterher im regulären Ausdruck
&[l|g]t;
verwenden um das Größer- / Kleinerzeichen wieder zu finden.
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: Reguläre Ausdrücke HTML Tags ingnorieren

Hi,
ich arbeite an einer live suche, unterhalb der suche sollen dann die Zeichen wo ich eingebe rot dargestellt werden.
Ich dachte mir ich löse dies über einen Regulären Ausdruck.
Nun besteht aber das problem das html tags auch verändert werden, das würde ich aber gerne vermeiden denn
HTML:
<<font color="red">s</font>trong>...</strong>
Funktioniert nicht ;)
daher wollte ich fragen ob es eine Möglichkeit gibt diese innerhalb von preg_replace zu ignorieren
PHP:
preg_replace ("~".$suchkette."~","<font color='red'>".$suchkette."</font>",$ausgabe);
Striptags kann ich nicht verwenden weil die Text Formatierung erhalten bleiben soll.

Hi,

natürlich kannst du strip_tags verwenden. Der Grund steckt in der Logik. Zum einen übergibst du ja das was im Eingabefeld enthalten ist per ajax an die Datei, welche die Suche und das Ergebnis zurück liefert. Mit dem Zurückzuliefernden Text, kanns du wiederum die enthaltenen Buchstaben/Begriffe entsprechend formatiert ausgeben. Somit hat das keinen Einfluss, was die Übergabe betriff.

Davon einmal ganz abgesehen - du solltest wenn schon direkt vor dem auslösen eines ajax-request html-Bestandteile entfernen, da sonst die Möglichkeit des Crosssitescripting besteht ;) Sprich - replace oder du baust eine REGEX per exec auf.
 

maba

Noch nicht viel geschrieben

AW: Reguläre Ausdrücke HTML Tags ingnorieren

Noch ne Idee

@fragmente = preg_split(..) um den Text bei den tags zu zerlegen.

Dann in einer Schleife über die Einzelfragmente iterieren und hinterher wieder zusammenfügen.
 

saila

Moderatorle

AW: Reguläre Ausdrücke HTML Tags ingnorieren

Noch ne Idee

@fragmente = preg_split(..) um den Text bei den tags zu zerlegen.

Dann in einer Schleife über die Einzelfragmente iterieren und hinterher wieder zusammenfügen.

Das ist zwar möglich, macht jedoch bei einer Livesuche keinen Sinn. Grund - es gibt ein Eingabefeld und der Inhalt dieses eingabefeldes ist somit relativ egal bis auf die Tatsache, das kein HTML enthalten sein darf.

Ein Ergebnisdarstellung einer Livesuche kann ausschl. durch einen auszulösenden ajax-request erfolgen. Das Ergebnis wird somit dann irgendwo auf der Seite dargestellt und in der Darstellung kann dann der eingegebene Text per html markiert werden. Somit ist es also völlig unabhängig vom Eingabetext, was letztlich markiert wird.

Warum ich das entsprechend erläutere liegt daran, da ich für jQuery ein Live-Sucheplugin erstellt habe inkl. des highlighting.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.614
Beiträge
1.538.351
Mitglieder
67.525
Neuestes Mitglied
mgtaucher
Oben