eregi_replace error
dit is de regel 112
$this->output = eregi_replace("\[url\][[:space:]]*(http://)?([^\\[]*)[[:space:]]*\[/url\]", "<a href=\"http://\\2\" onclick=\"target='_blank';\">http://\\2</a>", $this->output);
en dit een stukje omringend script
$this->output = preg_replace('!\[u\](.*?)\[/u\]!', "<u>\\1</u>", $this->output);
$this->output = preg_replace('!\[b\](.*?)\[/b\]!', "<strong>\\1</strong>", $this->output);
$this->output = preg_replace('!\[i\](.*?)\[/i\]!', "<i>\\1</i>", $this->output);
$this->output = preg_replace('!\[s\](.*?)\[/s\]!', "<s>\\1</s>", $this->output);
$this->output = preg_replace('!\[sup\](.*?)\[/sup\]!', "<sup>\\1</sup>", $this->output);
$this->output = preg_replace('!\[sub\](.*?)\[/sub\]!', "<sub>\\1</sub>", $this->output);
$this->output = preg_replace('!\[small\](.*?)\[/small\]!', "<small>\\1</small>", $this->output);
$this->output = preg_replace("#\[color=(\#[0-9A-F]{6}|[a-z\-]+)\](.*?)\[/color\]#si", "<span class='color: \\1'>\\2</span>", $this->output);
$this->output = eregi_replace("\[url\][[:space:]]*(http://)?([^\\[]*)[[:space:]]*\[/url\]", "<a href=\"http://\\2\" onclick=\"target='_blank';\">http://\\2</a>", $this->output);
//$this->output = eregi_replace("\\[url=([^\\[]*)\\]([^\\[]*)\\[/url\\]","<a href=\"\\1\" onclick=\"target='_blank';\">\\2</a>",$this->output);
$this->output = preg_replace("/\[url\=(.*?)\](.*?)\[\/url\]/is","<a href=\"$1\" onclick=\"target='_blank';\">$2</a>", $this->output);
$this->output = preg_replace("#([\n ])([a-z]+?)://([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]+)#i", "\\1<a href=\"\\2://\\3\" onclick=\"target='_blank';\">\\2://\\3</a>", $this->output);
$this->output = preg_replace("#([\n ])www\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)?)#i", "\\1<a href=\"http://www.\\2.\\3\\4/\" onclick=\"target='_blank';\">www.\\2.\\3\\4</a>", $this->output);
$this->output = preg_replace("#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)?[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $this->output);
$this->output = str_replace("
", "<hr style=\"width: 75%\" />", $this->output);
$this->output = str_replace("
", "<hr style=\"width: 75%\" />", $this->output);
if($sStatus != 1) $this->output = preg_replace("/\
Gebruik net als een paar regels eerder preg_replace()
resulteert in: Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in /home/zeewaterforum.biz/public_html/prof/classes/ubb.php on line 113
De melding is wel duidelijk: een pattern staat tussen niet-alfanumerieke tekens, zoals ~, #, @ en dergelijke
preg_replace('#abc[a-z]+\d$#', '$0', $string);
Je kunt ook een slash als delimiter gebruiken, maar zeker in combinatie met html- of ubbtags waarin al / staat, en ook nog een letterlijk bedoelde [ ] die ook nog met een \ escapet worden, wordt het met een slash als delimiter al snel een oerwoud aan slashes
(immers, de / in je string zou dan ook weer escapet moeten worden)
Rick steenhuis op 28/01/2014 12:03:58:
$this->output = eregi_replace("\\[url=([^\\[]*)\\]([^\\[]*)\\[/url\\]","<a href=\"\\1\" onclick=\"target='_blank';\">\\2</a>",$this->output);
resulteert in: Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in /home/zeewaterforum.biz/public_html/prof/classes/ubb.php on line 113
resulteert in: Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in /home/zeewaterforum.biz/public_html/prof/classes/ubb.php on line 113
eregi_replace resulteert niet in preg_replace warning....
Maar voor het omzetten van eregi_replace naar preg_replace kijk dan eens naar deze 2 regels in je eigen code
Code (php)
1
2
3
2
3
/$this->output = eregi_replace("\\[url=([^\\[]*)\\]([^\\[]*)\\[/url\\]","<a href=\"\\1\" onclick=\"target='_blank';\">\\2</a>",$this->output);
$this->output = preg_replace("/\[url\=(.*?)\](.*?)\[\/url\]/is","<a href=\"$1\" onclick=\"target='_blank';\">$2</a>", $this->output);
$this->output = preg_replace("/\[url\=(.*?)\](.*?)\[\/url\]/is","<a href=\"$1\" onclick=\"target='_blank';\">$2</a>", $this->output);
Hier heb je eregi al omgezet naar preg en zie je dat het niet klakkeloos kan kopiëren, maar het wel verschild. Zie Documentatie.
Een tip: Begin met een single quote (') om te voorkomen dat je de dubbel quotes (") moet gaan escapen (\") dit maakt het een stuk leesbaarder.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$this->output = eregi_replace("\\[url=([^\\[]*)\\]([^\\[]*)\\[/url\\]","<a href=\"\\1\" onclick=\"target='_blank';\">\\2</a>",$this->output);
// [url=http://phphulp.nl/]php hulp[/url]
$this->output = preg_replace("#\[url=([^\]]*)]([^\]]+)\[/url])#i",
'<a href="$1" onclick="target=_blank">$2</a>',
$this->output);
?>
$this->output = eregi_replace("\\[url=([^\\[]*)\\]([^\\[]*)\\[/url\\]","<a href=\"\\1\" onclick=\"target='_blank';\">\\2</a>",$this->output);
// [url=http://phphulp.nl/]php hulp[/url]
$this->output = preg_replace("#\[url=([^\]]*)]([^\]]+)\[/url])#i",
'<a href="$1" onclick="target=_blank">$2</a>',
$this->output);
?>
Toevoeging op 28/01/2014 12:16:12:
#....#i expressie case-Insensitive
\[url= letterlijk een [ gevolgd door url=
([^\]]*) 0 of meer keer een karakter uit de groep tussen []: ^\] (niet een ], die weer escapet wordt)
] letterlijk een ] (immers is onmogelijk een afsluiting van een eerder geopende [ ]
etc
Gewijzigd op 28/01/2014 12:13:18 door Ivo P
dit is de oorspronkelijke regel 112
$this->output = eregi_replace("\[url\][[:space:]]*(http://)?([^\\[]*)[[:space:]]*\[/url\]", "<a href=\"http://\\2\" onclick=\"target='_blank';\">http://\\2</a>", $this->output);
ik had de hoop dat deze zou werken maar dat was iets te makelijk
$this->output = preg_replace("\[url\][[:space:]]*(http://)?([^\\[]*)[[:space:]]*\[/url\]", "<a href=\"http://\\2\" onclick=\"target='_blank';\">http://\\2</a>", $this->output);
resulteert in: Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in /home/zeewaterforum.biz/public_html/prof/classes/ubb.php on line 112
delimter #
\ letterlijk [url]
\s* 0 of meer spaties
(https?://)?
optioneel, want ?
letterlijk http:// of https:// (de s is dus ook optioneel door de ?
([^] ]+)
een serie van 1 of meer (+) tekens, niet zijnde een ] of een spatie
\s* weer 0 of meer spaties
\[/url] letterlijk
i hele verhaal case Insens
Gewijzigd op 28/01/2014 12:23:03 door Ivo P
$this->output = preg_replace("#\[url\][[:space:]]*)](https?://)?([^] ]+)\[/url])#i",
'<a href="$1" onclick="target=_blank">$2</a>',
$this->output);
ik weet niet eens zeker of preg [:space:] wel kent.
Verder heb je nu dus nodig
want $1 is het eerst ding tussen ( ), dus het protocol en $2 het tweede, dus "www.xyz.nl"
sorry ik weet dat t niet de bedoeling is maar kunt u voor mij een regel maken die klopt ? want ik heb twijfels over mijn eigen kunsten mvg rick
Rick steenhuis op 28/01/2014 12:41:27:
sorry ik weet dat t niet de bedoeling is maar kunt u voor mij een regel maken die klopt ? want ik heb twijfels over mijn eigen kunsten mvg rick
Ivo P heeft het antwoord al gegeven. Zie ook, zoals ik al zei, de documentatie.
$this->output = preg_replace("#\[url\][[:space:]]*)](https?://)?([^] ]+)\[/url])#i",<a href="$1$2" onclick="target=_blank">$1$2</a>
en dit is de error
Parse error: syntax error, unexpected '<' in /home/zeewaterforum.biz/public_html/prof/classes/ubb.php on line 112
Toevoeging op 28/01/2014 13:43:22:
en ook met \s blijft het scherm wit
je mist na de erste comma een ', net als na de </a> en ook mis je nog daarachter een var als $this-output