[PHP] Fout in ubbparser

Pagina: 1
Acties:
  • 109 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb voor mn forum een ubbparser (duh :p), alles erin werkt heel erg prima naar mijn mening, alleen er is 1 klein bugje...
Die ik zelf nogal vaag vind, en niet kan vinden waarom het gebeurd...

code:
1
2
3
4
5
6
7
8
9
<?php
  $text = preg_replace('#(^|[\n ])(http://[^ \n\r\t<]*)#is', '\1<a href="\2" target="_blank" style=text-decoration:underline;>\2</a>', $text);
  $text = preg_replace('#(^|[\n ])((www|ftp).[^ \t\n\r<]*)#is', '\1<a href="http://\2" target="_blank" style=text-decoration:underline;>\2</a>', $text);

  $text = preg_replace('/\[url=www.(.*?)\][\/url]/si', '<a href="http://www.\\1" target="_blank" style="text-decoration:underline;">\\2</a>',$text);
  $text = preg_replace('/\[url=(.*?)\][\/url]/si', '<a href="\\1" target="_blank" style="text-decoration:underline;">\\2</a>',$text);
  $text = preg_replace('/\[url=(.*?)\](.+?)\\[\/url]/isD', '<a href="\\1" target="_blank" style="text-decoration:underline;">\\2</a>',$text);
  $text = preg_replace('/\[url](.*?)\\[\/url]/si','<a href="\\1" target="_blank" style="text-decoration:underline;">\\1</a>',$text); 
?>


Zodra ik dit gebruik:
code:
1
[url=http://www.bla.nl]Bla[/url]
gaat hij goed, maar zodra de naam van de url met een R begint, geeft hij de url niet goed meer weer.. dus
code:
1
[url=http://www.bla.nl]Rare bug[/url]


Dan krijg ik iets te zien van
code:
1
arararara[/url]


Wie kan me helpen met dit probleem :)?

[ Voor 34% gewijzigd door Verwijderd op 13-11-2004 16:27 ]


Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 20-09 23:02
Heb je ook last als de naam begint met een 'n' of een 't'?
Verder geldt gewoon net als altijd debuggen!
Zet na elke replace een echo $text; dan moet je er zo uit zijn. Verder kan je zoveel mogelijk code weg te halen zodanig dat het probleem zich nog steeds voordoet.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik zie zo ff niet waar je fout kan zitten, maar misschien kun je een werkende regexp van RegExLib.com halen?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Jordi
  • Registratie: Januari 2000
  • Niet online

Jordi

#1#1

code:
1
'/\[url=(.*?)\][\/url]/si'

Je vergeet heel handig (:P) die laatste [ en ] te escapen zodat /, u, r, l als karakterset worden beschouwd. Hij zal nu meteen op de R uit 'Rare bug' matchen.
Dat doe je trouwens op meerdere plaatsen, maar deze is de boosdoener, gok ik.
edit:
overigens begrijp ik niet wat deze regex hier doet. je verwijst in de replace naar een 2e ding dat helemaal niet gecaptured wordt.

[ Voor 37% gewijzigd door Jordi op 13-11-2004 17:17 ]

Het zal wel niet, maar het zou maar wel.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sjaaky schreef op zaterdag 13 november 2004 @ 16:38:
Heb je ook last als de naam begint met een 'n' of een 't'?
Verder geldt gewoon net als altijd debuggen!
Zet na elke replace een echo $text; dan moet je er zo uit zijn. Verder kan je zoveel mogelijk code weg te halen zodanig dat het probleem zich nog steeds voordoet.
Nope, het is alleen met de 'r'... ik zal eens proberen met die echo's :)

@ Jotti - Wat zou het wel moeten worden dan? Heb wel wat zitten escapen enzo, maar kreeg steeds errors :p

[ Voor 15% gewijzigd door Verwijderd op 13-11-2004 17:26 ]


Acties:
  • 0 Henk 'm!

  • MrJay
  • Registratie: Juni 2004
  • Laatst online: 24-10-2024
Je vergeet geregeld de ] van de [url] of [\url] te backspacen. Probeer deze eerst eens te backspacen...

Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 21:35

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

offtopic: ipv al die losse regexpen, is het overzichtelijker om ze in een array te zetten:
Every parameter to preg_replace() (except limit) can be an unidimensional array. When using arrays with pattern and replacement, the keys are processed in the order they appear in the array. This is not necessarily the same as the numerical index order.
PHP:
1
2
3
4
5
6
7
8
$pattern[0] = '#(^|[\n ])(http://[^ \n\r\t<]*)#is';

(...)

$replacement[0] = '\1<a href="\2" target="_blank" style=text-decoration:underline;>\2</a>';

(...)
return preg_replace($patterns, $replacement, $input);

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.

Pagina: 1