Computerhilfen.de Logo
Forum
Tipps
News

PHP: mit RegEx <br> entfernen

Hi Leute,

ich habe ein backend für unsere Schulhomepage programmiert.
Bis jetzt funktioniert auch alles super.

Jetzt meine Frage:
Um Zeilenumbrüche zu vereinfachen, will ich mit nl2br() die zeilenumbrüche in der textarea in <br /> umwandeln.
Dies produziert aber "unsauberen" Code:
z.B.:

<table border="0">
<tr>
<td>Anschrift</td>
<td>Straße XyZ</td>
</tr>
<tr>...</tr>
</table>

würde

<table border="0"><br />
<tr><br />
<td>Anschrift</td><br />
<td>Straße XyZ</td><br />
</tr><br />
<tr>...</tr><br />
</table><br />

erzeugen.

Allerdings sind BR-Tags zwischen <table> und <td> nicht erlaubt!

Also hat vielleicht jemand Lust den RegEx-Code für mich zu schreiben? Ich versteh' das mit preg_replace() nicht, preg_match(_all)() hab ich schon öfters verwendet.

Wäre echt nett wenn Ihr das für <table>, <ul> und <ol> machen würdet. Bitte postet es von preg_replace( bis ), weil ich den Teil mit dem Ersatzstring nicht verstehe. :(

Vielen, Vielen Dank

« Letzte Änderung: 08.05.12, 19:15:03 von .hendrik »

Antworten zu PHP: mit RegEx <br> entfernen:

Keine eine Idee?  :(

Naja ich kann das nl2br() auch weglassen, und im Quelltext <br /> einfügen, wo es soll. 

Hi,

Hab mal an ner Lösung gebastelt, so wie du sie zu meinen scheinst.

Zitat
//Lösungsfunktion:

<?
function nl2br_modified($input)
{
   $input_array=explode("\n", $input);
   $input="";
   foreach($input_array as $cache)
   {
      if (!(preg_match("(<table(.*)>)", $cache) or preg_match("(<tr(.*)>)", $cache) or preg_match("(<td(.*)>)", $cache)  or preg_match("(<ul(.*)>)", $cache) or preg_match("(<li(.*)>)", $cache)  or preg_match("(<ol(.*)>)", $cache)))
         $input=$input.$cache."<br />";
      else
         $input=$input.$cache."";
   }
   return $input;
}

?>

Zitat
//Aufruf:

<?

$quelltext='<table border="0">
<tr>
<td>Anschrift</td>
<td>Straße XyZ</td>
</tr>
<tr>...</tr>
</table>';
echo $quelltext=nl2br_modified($quelltext);

?>

War das so gemeint?

Meister Falke

Viiiiiiiiiiiiiiieeeeeeeeeeelen Dank!!

Vielen Dank Meister Falke!
Es funktioniert sehr gut.

ABER:
Es erzeugt ein <br /> vor </table> :(

Ich wollte deine Funktion ein bisschen ändern, um dich nicht zu nerven. Ich habe <table(.*)> zu <(/)?table(.*)?> geändert, um den Schrägstrich zu erfassen, aber es funktioniert nicht.

Weißt du wie es geht?
Aber sonst fuktioniert sie.

Danke

Komisch bei </ul> funktioniert es.

Dann müsste die Funktion so lauten:

Zitat
<?
function nl2br_modified($input)
{
   $input_array=explode("\n", $input);
   $input="";
   foreach($input_array as $cache)
   {
      if (!(preg_match("(<(/*)table(.*)>)", $cache) or preg_match("(<(/*)tr(.*)>)", $cache) or preg_match("(<(/*)td(.*)>)", $cache)  or preg_match("(<(/)ul(.*)>)", $cache) or preg_match("(<(/*)li(.*)>)", $cache)  or preg_match("(<(/*)ol(.*)>)", $cache)))
         $input=$input.$cache."<br />";
      else
         $input=$input.$cache."";
   }
   return $input;
}
?>

Bei regulären Ausdrücken besagt ? hinter Klammern, dass der Ausdruck in den Klammern beliebig oft wiederholt vorkommen darf. Das hier einzusetzen macht keinen Sinn, da <//table> genauso wenig Sinn macht wie <////table>.

Ich werde es gleich testen.

http://regexp-evaluator.de/tutorial/quantifier/
Schau unter Kurzschreibweisen --> Ein oder kein Vorkommen:
Das Fragezeichen sagt, dass der vorhergehende Abschnitt/Buchstabe/Zeichen ein oder kein mal vorkommen kann.
Der Stern heißt das, was du meintest.

« Letzte Änderung: 13.05.12, 01:02:00 von .hendrik »

Ja, also es scheint zu funktionieren. Soweit ich das jetzt sehe.
Vielen DAnk noch mal, das war echt 'ne große Hilfe.

K - habe das mit regulären Ausdrücken in Linux verwechselt.

Was heißt das K ?

steht für ok also okay ^^

Ähmm.. OK komische abkürtzung.

Trotzdem Danke

gern ^^


« Google sucht nicht mehrhtml: linie zeichnen »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!