Text in HTML Code umwandeln, aber <a href="..">LINK</a> nicht umwandeln?

chris4712

Erfahrenes Mitglied
Hallo!

Wie aus der Überschrift vielleicht schon zu erahnen ist habe ich folgendes Problem:
Ich möchte dass ein Text in HTML Code umgewandelt wird.
Allerdings soll der Tag
Code:
<a href=http://www.beispiel.de target="_blank">Link Text</a>
NICHT in HTML Code umgewandelt werden, sonder so bestehen bleiben.
Das Problem ist an sich ja dass es ja auch in einer anderen Reihenfolge (also z.B. erst target und dann die Adresse) bestehen kann.
Hoffe ihr habt eine gute Idee.
Gruß

Christian
 
Hi, ich muss ehrlich sagen das ich dein Problem nicht ganz verstehe ("target und so, dein Tag ist doch schon html code, oder?"),

aber du kannst doch einfach String Funktionen benuzten, z.B. str_replace und alle Zeichen die du tauschen möchtest tauschen. Evt. brauchst du noch ein nl2br() um Zeilenumbrüche zu machen, aber es sind ja nur wenige Zeichen
 
du könntest erst alles per htmlspecialchars() umwandeln und dann die Links per RegExp in den ursprünglichen Zustand versetzen.

Der RegExp, um die <a>-Tags zu Finden wäre ca. so:
Code:
'#(&lt;a\s.+&gt;|&lt;\/a&gt;)#is'
 
Hey!

OK, dann muss ich mich wohl mal mit regulären Ausdrücken auseinander setzen.
Schade, hatte gedacht es gibt irgend eine Funktion oder so die "sinnvollen" HTML Code nicht umwandelt (ich weiß, hört sich komisch an :) )
Vielen Dank schon mal. Wenn noch einer eine andere Idee hat bitte melden!
Gruß

Christian
 
Abend!

Muss noch mal ganz ganz doof nachfragen. Ist mir schon fast peinlich:

Ich hab einen Regulären Ausdruck generiert. Kann also nun nachschauen ob in einem Text sich ein Link versteckt, aber wie soll es nun weiter gehen? Der Link Tag soll ja nicht umgewandelt werden.

Hier mal ein Beispiel:
PHP:
$string = "Text vor dem Link &lt;a target=&quot;_blank&quot; href=&quot;?Page=Test&quot;&gt;Test&lt;/a&gt; Text nach dem Link"; // So sieht der Text nach der Umwandlung mit htmlspecialchars() aus
 
// Kommt im String eine Adresse vor?
echo (ereg('(&lt;a)( target=&quot;_blank&quot;)?( href=&quot;).+(&quot;&gt;)( target=&quot;_blank&quot;)?.+(&lt;/a&gt;)', $string))?'Adress-Tag gefunden':'Normaler Text';

Also praktisch gesehen muss ich, sobald ich eine Adresse gefunden habe, diese wieder umwandeln!?
Stehe grade nur mächtig aufm Schlauch wie ich das am besten mache?!
Gruß und sorry für die dumme Frage!
 
Ich hab das jetzt mal gelesen und bin der Meinung, das du damit auf dem Holzweg bist. Bitte poste doch mal einen Beispiel-Text, den umwandeln willst. Kannst ja auch per Attachment machen. Ich vermute an dieser Stelle, das es für dein Problem eine ganz simple Lösung gibt.
 
Hallo!
OK, dann mal hier die Schritte mit Text usw.:
1) Texteingabe:
Code:
Dies ist ein Beispieltext, der auch Umlaute wie Ä Ö Ü oder ß enthalten kann. Halt grade dass was man eingibt. Es können auch " drin vor kommen, oder halt <a href="http://www.adresse.de">Links</a>. Oder es wird was <strong>FETT</strong> geschrieben.
2) Dieser Text wird nun mit htmlentities() umgewandelt, und es entsteht daraus:
Code:
Dies ist ein Beispieltext, der auch Umlaute wie &Auml; &Ouml; &Uuml; oder &szlig; enthalten kann. Halt grade dass was man eingibt. Es k&ouml;nnen auch &quot; drin vor kommen, oder halt &lt;a href=&quot;http://www.adresse.de&quot;&gt;Links&lt;/a&gt;. Oder es wird was &lt;strong&gt;FETT&lt;/strong&gt; geschrieben.
3) Aber einige HTML Tags (fett, unterstrichen, kusiv und Links) sollen bestehen bleiben, also ersetze ich mit str_replace() z.B. &lt;strong&gt; durch <strong>:
Code:
Dies ist ein Beispieltext, der auch Umlaute wie &Auml; &Ouml; &Uuml; oder &szlig; enthalten kann. Halt grade dass was man eingibt. Es k&ouml;nnen auch &quot; drin vor kommen, oder halt <a href="http://www.adresse.de">Links</a>. Oder es wird was <strong>FETT</strong> geschrieben.
4) Text wird gespeichert

So sieht es aus.
Das einzige Problem was ich habe sind die Links. Müsste also erkennen ob es ein Link ist, (also schauen wo <a anfängt, und > den Tag wieder beendet) und den den Text dazwischen wieder decodieren.
Ich hoffe mein "Problem" ist nun klar geworden.
Gruß!
 
Wenn du nur die Umlaute umwandeln möchtest, genügt doch ein regulärer Ausdruck:

PHP:
$text = preg_replace( array('/ö/', '/ä/',.....), array('&ouml;', '&auml;',.....), $text);
 
Ja, OK, ich könnte mir nun die Arbeit machen und alle Zeichen, für die es auch ein HTML Tag gibt umwandeln, aber da wäre ja dann die Anführungszeichen drunter, und dann würden sie auch bei dem Adresstag umgewandelt, was aber nicht sein soll!
 

Neue Beiträge

Zurück