Forum
Tipps
News
Menu-Icon

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 »
 

Fremdwörter? Erklärungen im Lexikon!
Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...

Unicode
Unicode ist ein international anerkannter Standard, der als universeller Zeichencode ("Universal Code") dient und durch das Unicode-Konsortium entwickelt und verwaltet wi...

QR-Code
QR-Codes, die Abkürzung für "Quick Response Codes", sind eine Form von zweidimensionalen Barcodes. Damit lassen sich Informationen schnell und effizient speiche...


Hintergrund auf Fotos entfernen! (kostenlos mit Windows)!

Widerspenstige Dateien und Ordner löschen (Eingabeaufforderung unter Windows)