Versio

[link] wel, [link=] niet.

Overzicht Reageren

Iltar van der berg

iltar van der berg

30/06/2007 20:23:00
Quote Anchor link
Ik heb een preg_match in combo met replace voor mijn ubb.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

function ubbpage($content)
{

    nl2br($content);
    $content = preg_replace("#\[b\](.*?)\[/b\]#si", "<strong>$1</strong>", $content);
    $content = preg_replace("#\[i\](.*?)\[/i\]#si", "<em>$1</em>", $content);
  
  
    if(preg_match("#\[link\]([a-z0-9:\?\.&/]*)\[/link\]#is",$content))
    {

        $content = addslashes($content);
        $content = preg_replace("#\[link\](.*?)\[/link\]#si", "<a href=\"$1\" target=\"_blank\">$1</a>", $content);
    }

  
    if(preg_match("#\[link=([a-z0-9:\?\.&/]*)\](.*?)\[/link\]#is",$content))
    {

        $content = addslashes($content);
        $content = preg_replace("#\[link=(.*?)\](.*?)\[/link\]#si", "<a href=\"$1\" target=\"_blank\">$2</a>", $content);
    }

    return $content;
}

?>


Nu werkt [link]http[/link] goed, [link=http]lol[/link] werkt ook.

Daaren tegen werkt
[link][b]http[/link] wel, maar [link=[b]]http[/link] ook! Dat is fout
Zoals ik het in het script heb staan, lijkt me dat het niet zou moeten werken, of ligt het aan mij? Ik gebruik hetzelfde stukje als bij [link] voor het stukje [link=], maar daar werkt het niet.

Hoe zorg ik ervoor dat het wel werkt? Zodat [link=[b]] niet werkt, maar [link=http][b][/link] wel?
Gewijzigd op 01/01/1970 01:00:00 door Iltar van der berg
 
PHP hulp

PHP hulp

25/05/2012 08:09:12
Gesponsorde koppelingen:
 
Joren de Wit
Beheerder

Joren de Wit

30/06/2007 22:03:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$content
= "[link=[b]]iets[/link]";
var_dump(preg_match("#\[link=([a-z0-9:\?\.&/]*)\](.*?)\[/link\]#is",$content));
?>

Hier komt gewoon false uit, dus dat werkt gewoon.

Waardoor het bij jou fout gaat is dat je eerst de [b] vervangt en dan pas een eventuele [link] controleert en vervangt. Dat zou je dus even moeten aanpassen.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Iltar van der berg

iltar van der berg

30/06/2007 22:06:00
Quote Anchor link
Ah op zon manier...

Dus door de < en > ziet hij het niet als invalid..

dus als ik de bold tags onderaan zou zetten, zou het wel werken?

Edit:

werkt niet...

Ik snap niet waarom hij het niet doet, want bij de andere preg_match werkt het wel
Gewijzigd op 01/01/1970 01:00:00 door iltar van der berg
 
Iltar van der berg

iltar van der berg

30/06/2007 22:19:00
Quote Anchor link
Ik snap er niets van, als ik het tweede blok erbij heb, flipt alles, maar als ik dat met // ervoor heb, werkt het eerste perfect, maar dan heb ik die andere weer niet :(
 
Joren de Wit
Beheerder

Joren de Wit

30/06/2007 22:20:00
Quote Anchor link
Klopt, nu zie ik wat het probleem is, of eigenlijk geen probleem is: je script werkt gewoon goed.

Je hebt echter nog geen afhandeling van de gevallen waarin de syntax niet correct is. Kortom, als de [link] syntax niet correct is zal er niets vervangen worden en daardoor $content ook niet veranderen...
 
Iltar van der berg

iltar van der berg

30/06/2007 22:26:00
Quote Anchor link
Dat moet juist ook.

Zou jij die 2 blocken goed kunnen maken?

Ik heb nu als output:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<a href="[b" target="_blank">http://www.infernogm.com]dit is een link</a>
<br />
<a href="javascript:alert(\\\'hallo\\\')" target="_blank">dit is een link</a>
<br />
<a href="http://www.infernogm.com" target="_blank">http://www.infernogm.com</a>
<br />
<br />
<a href=\"[b]http://www.infernogm.com\" target=\"_blank\">[b]http://www.infernogm.com</a>
<br />
<a href=\"javascript:alert(\\\'hallo\\\')\" target=\"_blank\">javascript:alert(\\\'hallo\\\')</a>
<br />
<a href=\"http://www.infernogm.com\" target=\"_blank\">http://www.infernogm.com</a>
<br />
<br />


http://www.infernogm.com]dit is een link
dit is een link
http://www.infernogm.com

[b]http://www.infernogm.com
javascript:alert(\\\'hallo\\\')
http://www.infernogm.com



Met als input:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
$content
= '';

$content .= '[link=[b]http://www.infernogm.com]dit is een link[/link]<br />';
$content .= '[link=javascript:alert(\'hallo\')]dit is een link[/link]<br />';
$content .= '[link=http://www.infernogm.com]http://www.infernogm.com[/link]<br />';

$content  .= '<br />';

$content .= '[link][b]http://www.infernogm.com[/link]<br />';
$content .= '[link]javascript:alert(\'hallo\')[/link]<br />';
$content .= '[link]http://www.infernogm.com[/link]<br />';

echo ubbpage($content);

function
ubbpage($content)
{

    nl2br($content);
    
    $content = preg_replace("#\[b\](.*?)\[/b\]#si", "<strong>$1</strong>", $content);
    $content = preg_replace("#\[i\](.*?)\[/i\]#si", "<em>$1</em>", $content);
    $content = preg_replace("#\[u\](.*?)\[/u\]#si", "<u>$1</u>", $content);
    $content = preg_replace("#\[s\](.*?)\[/s\]#si", "<s>$1</s>", $content);
    
    if(preg_match("#\[link\]([a-z0-9:\?\.&/]*)\[/link\]#is",$content))
    {

        $content = addslashes($content);
        $content = preg_replace("#\[link\](.*?)\[/link\]#si", "<a href=\"$1\" target=\"_blank\">$1</a>", $content);
    }

    
    if(preg_match("#\[link=([a-z0-9:\?\.&/]*)\](.*?)\[/link\]#is",$content))
    {

        $content = addslashes($content);
        $content = preg_replace("#\[link=(.*?)\](.*?)\[/link\]#si", "<a href=\"$1\" target=\"_blank\">$2</a>", $content);
    }

    
    return $content;
}


?>


als er dus iets niet aan klopt, moet hij de waarde laten zoals het is, zodat je kan zien wat de fout is. anders moet hij er een link van maken. Ik snap niet waarom het nu zo vreemd werkt.
Gewijzigd op 01/01/1970 01:00:00 door iltar van der berg
 



Overzicht Reageren

Get Adobe Flash player