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



## chris4712 (13. Juni 2007)

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

```
<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


----------



## supersalzi (14. Juni 2007)

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


----------



## Sven Mintel (14. Juni 2007)

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:
	
	
	



```
'#(&lt;a\s.+&gt;|&lt;\/a&gt;)#is'
```


----------



## chris4712 (16. Juni 2007)

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


----------



## chris4712 (16. Juni 2007)

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:

```
$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!


----------



## saftmeister (16. Juni 2007)

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.


----------



## chris4712 (17. Juni 2007)

Hallo!
OK, dann mal hier die Schritte mit Text usw.:
*1) Texteingabe:*

```
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:*

```
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>:*

```
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ß!


----------



## saftmeister (17. Juni 2007)

Wenn du nur die Umlaute umwandeln möchtest, genügt doch ein regulärer Ausdruck:


```
$text = preg_replace( array('/ö/', '/ä/',.....), array('&ouml;', '&auml;',.....), $text);
```


----------



## chris4712 (17. Juni 2007)

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!


----------



## saftmeister (17. Juni 2007)

Stimmt, dafür müsste ein seperater Regex erstellt, werden, der alle Quotes umwandelt, die außerhalb von <a> sind. Dafür brauchst du look-behind und look-ahead. Für diese Anwendung gab es hier schon nen Thread: http://www.tutorials.de/forum/php/278039-problem-bei-highlight-suche.html


----------



## chris4712 (17. Juni 2007)

OK, danke schon mal, ich versuch mal mein Glück


----------

