eregi_replace omzetten naar preg_replace
Ik heb het volgende probleem. Op mijn website kreeg ik een foutmelding in mijn ubb.php bestand. Er staan namelijk nog een aantal regels in eregi_replace en mijn server draait momenteel op php versie 5.3 en dus is dit outdated.
Ik heb geprobeerd dit op te lossen maar ik blijf een foutmelding krijgen, ook heb ik verschillende tutorials geprobeerd om te aan te passen maar dit is mij tot op heden niet gelukt.
Ik hoop dat iemand mij uitleg kan geven over wat ik precies verkeerd doe.
Original code:
$bericht = eregi_replace("(^|[ \n\r\t])((http(s?)://)(www\.)?([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)","\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $bericht);
$bericht = eregi_replace("(^|[ \n\r\t])((ftp://)(www\.)?([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)","\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $bericht);
$bericht = eregi_replace("([a-z_-][a-z0-9\._-]*@[a-z0-9_-]+(\.[a-z0-9_-]+)+)","<a href=\"mailto:\\1\">\\1</a>", $bericht);
$bericht = eregi_replace("(^|[ \n\r\t])(www\.([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)","\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $bericht);
$bericht = eregi_replace("(^|[ \n\r\t])(ftp\.([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)","\\1<a href=\"ftp://\\2\" target=\"_blank\">\\2</a>", $bericht);
Adapted code:
$bericht = preg_replace("#\(^|[ \n\r\t])((http(s?)://)(www\.)?([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)#is","\\$1<a href=\"\\$2\" target=\"_blank\">\\$2</a>", $bericht);
$bericht = preg_replace("#\(^|[ \n\r\t])((ftp://)(www\.)?([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)#is","\\$1<a href=\"\\$2\" target=\"_blank\">\\$2</a>", $bericht);
$bericht = preg_replace("#\([a-z_-][a-z0-9\._-]*@[a-z0-9_-]+(\.[a-z0-9_-]+)+)#is","<a href=\"mailto:\\$1\">\\$1</a>", $bericht);
$bericht = preg_replace("#\(^|[ \n\r\t])(www\.([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)#is","\\$1<a href=\"http://\\$2\" target=\"_blank\">\\$2</a>", $bericht);
$bericht = preg_replace("#\(^|[ \n\r\t])(ftp\.([a-z0-9_-]+(\.[a-z0-9_-]+)+)(/[^/ \n\r]*)*)#is","\\$1<a href=\"ftp://\\$2\" target=\"_blank\">\\$2</a>", $bericht);
Bij voorbaat dank.
eregi_replace is verouderd, gebruik preg_replace()
Zoals ik ook in de titel van dit topic heb aangegeven weet ik inderdaad dat eregi_replace verouderd is en dat hiervoor preg_replace gebruikt moet worden. Echter krijg ik dit niet voor elkaar, en zoals ik hierboven ook aangegeven heb, heb ik dit geprobeerd aan te passen maar ik blijf een 'warning' krijgen. Mijn vraag is dus ook wat ik fout doe en niet hoe ik eregi_replace update.
Toch bedankt voor je reactie.
Welke code gaat er dan fout? En welke foutmelding krijg je?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$bericht = preg_replace('#(^|[ \n\r\t])([a-z0-9]{1,6}://([a-z0-9\-]{1,}(\.?)){1,}[a-z]{2,5}(:[0-9]{2,5}){0,1}((\/|~|\#|\?|=|&|&|\+){1}[a-z0-9\-._%]{0,}){0,})#si', '\\1<a href="\\2">\\2</a>', $bericht);
$bericht = preg_replace('#(^|[ \n\r\t])((www\.){1}([a-z0-9\-]{1,}(\.?)){1,}[a-z]{2,5}(:[0-9]{2,5}){0,1}((\/|~|\#|\?|=|&|&|\+){1}[a-z0-9\-._%]{0,}){0,})#si', '\\1<a href="http://\\2">\\2</a>', $bericht);
$bericht = preg_replace('#(^|[ \n\r\t])(([a-z0-9\-_]{1,}(\.?)){1,}@([a-z0-9\-]{1,}(\.?)){1,}[a-z]{2,5})#si', '\\1<a href="mailto:\\2">\\2</a>', $bericht);
?>
$bericht = preg_replace('#(^|[ \n\r\t])([a-z0-9]{1,6}://([a-z0-9\-]{1,}(\.?)){1,}[a-z]{2,5}(:[0-9]{2,5}){0,1}((\/|~|\#|\?|=|&|&|\+){1}[a-z0-9\-._%]{0,}){0,})#si', '\\1<a href="\\2">\\2</a>', $bericht);
$bericht = preg_replace('#(^|[ \n\r\t])((www\.){1}([a-z0-9\-]{1,}(\.?)){1,}[a-z]{2,5}(:[0-9]{2,5}){0,1}((\/|~|\#|\?|=|&|&|\+){1}[a-z0-9\-._%]{0,}){0,})#si', '\\1<a href="http://\\2">\\2</a>', $bericht);
$bericht = preg_replace('#(^|[ \n\r\t])(([a-z0-9\-_]{1,}(\.?)){1,}@([a-z0-9\-]{1,}(\.?)){1,}[a-z]{2,5})#si', '\\1<a href="mailto:\\2">\\2</a>', $bericht);
?>
Gewijzigd op 27/10/2015 19:32:51 door Joni Fleischer
Output escaping (htmlspecialchars() over het resultaat halen) kan daarbij helpen.
En voor een correcte werking van je output escaping is het weer van belang dat... je character encoderingen op orde zijn (hoe kon het ook anders).
Daarbij ben ik eigenlijk een voorstander van "domme" forum functionaliteit. In die zin dat als je ergens een klikbare hyperlink van wilt maken, dat je er maar [url][/url] omheen zet, en geen automatische detectie die alles omzet en in een heleboel randgevallen fout gaat.
Gewijzigd op 27/10/2015 19:44:49 door Thomas van den Heuvel
Bedankt voor alle reacties. Tip voor '- Ariën -', lees voortaan even het topic goed door voordat je iemand probeert te helpen. Joni bedankt voor de code, het werkt. Ik begrijp alleen nog steeds niet precies waarom, desalniettemin zeer tevreden. Thomas bedankt voor de tip en ik begrijp je mening over de forum functionaliteit.