[PHP] (2e)regex pakt de spatie niet

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke mensen ik heb het volgende probleem:

Ik heb dus verschillende ubb codes 'gemaakt' nu werkt dat allemaal goed behalve 1 ding nl. de [ code ] tag..

In de functie die preg_replace aanroept (show_code()) is het de bedoeling dat elke spatie word vervangen door een &.nbsp; maar dat werkt dus totaal niet, zelfs a door b vervangen werkt niet, dus het ligt niet aan de regexps lijkt me :?

maaaaar... als ik met de regexp gewoon gelijk de waarde van het form pak, ipv wat van de ubb functie af komt, werkt het wel! :/

Iemand enig idee waar dit aan kan liggen? (en ja ik weet het, beetje ranzig die style=' zooi :P)


Ik heb de volgende code:
PHP:
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
function show_code($code)
{
 $code = str_replace("[[:space:]]"," ",$code);
 $return = "<font size=-1>code:</font><Br/>"
          ."<span style=\"padding: 4px;background-color: #FFFFFF;"
          ."width: 60%;color: #000000;font-family: courier;"
          ."border: #000000 1px solid;\">"
          .$code
          ."</span>";

 return $return;
}



function ubb($input)
{
    $input = htmlspecialchars($input);
    $input = nl2br($input);
    $input = stripslashes($input);
    $input = preg_replace("/\\[code\](.*?)\\[\/code\]/msi",show_code("\\1"),$input);
    $input = preg_replace("/\\[b\](.*?)\\[\/b\]/msi","<b>\\1</b>",$input);
    $input = preg_replace("/\\[i\](.*?)\\[\/i\]/msi","<i>\\1</i>",$input);
    $input = preg_replace("/\\[u\](.*?)\\[\/u\]/msi","<u>\\1</u>",$input);
    $input = preg_replace("/\\[s\](.*?)\\[\/s\]/msi","<strike>\\1</strike>",$input);
    $input = preg_replace("/\[color=(.*?)\](.*?)\\[\/color\]/msi","<font color=\\1>\\2</font>",$input);
    $input = preg_replace("/\[size=(.*?)\](.*?)\\[\/size\]/msi","<font size=\\1>\\2</font>",$input);
    $input = preg_replace("/\\[center\](.*?)\\[\/center\]/msi","<center>\\1</center>",$input);
    return $input;
}


thx in advance :)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

str_replace is geen regexp hoor :o
waarom doe je niet gewoon:

PHP:
1
$code = str_replace(' ','&nbsp;',$code)


Je code tussen <pre> tags zetten is ook nog een optie :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op 23 april 2003 @ 12:30:
str_replace is geen regexp hoor :o
waarom doe je niet gewoon:

PHP:
1
$code = str_replace(' ','&nbsp;',$code)


Je code tussen <pre> tags zetten is ook nog een optie :)
oeps :D

Maar geen enkele regexps (of str) werkt, zelfs dit niet:
PHP:
1
2
3
<?php
$code = str_replace("a","b",$code);
?>


Maar als ik dit zou doen:

PHP:
1
2
3
<?php
$code = str_replace("a","b",$_POST['code']);
?>


werkt het wel :(

edit:

<pre> works like a charm, maar wil toch ff het probleem weten :)

[ Voor 42% gewijzigd door Verwijderd op 23-04-2003 13:26 . Reden: typfouten ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

register_globals dus :) (zie FAQ)

doe het eens zo:

PHP:
1
2
3
4
$code = ''; // initialize
if (isset($_POST['code'])) $code = $_POST['code'];

$code = str_replace(' ','&nbsp;',$code)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op 23 April 2003 @ 13:24:
register_globals dus :) (zie FAQ)

doe het eens zo:

PHP:
1
2
3
4
$code = ''; // initialize
if (isset($_POST['code'])) $code = $_POST['code'];

$code = str_replace(' ','&nbsp;',$code)
Nah dat is het niet, de var $code is de \\1 van de preg_replace, komt dus niet van een form af ofso ;)

ik echo em namelijk zo:
PHP:
1
2
3
<?php
echo ubb( $_POST['code'] );
?>

Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Laat die preg replace aanroep dan eens zien

edit:

Laat maar, eerst goed kijken |:( "leest de draad, alvoor gij blaat..."

[ Voor 52% gewijzigd door beetle71 op 23-04-2003 13:45 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

PHP:
1
$input = preg_replace("/\\[code\](.*?)\\[\/code\]/msi",show_code("\\1"),$input);

Denk eens ff goed na ;).. Waneer wordt die show_code functie uitgevoerd, en welke parameter krijgt hij mee?
Doe voor de gein eens een 'echo $code;' in de functie...

(HINT: Als uitvoer krijg je dan waarschijnlijk \\1 )

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Nog een hint dan :) /e ...........

zie: preg-replace

[ Voor 56% gewijzigd door beetle71 op 23-04-2003 13:49 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op 23 april 2003 @ 13:44:
PHP:
1
$input = preg_replace("/\\[code\](.*?)\\[\/code\]/msi",show_code("\\1"),$input);

Denk eens ff goed na ;).. Waneer wordt die show_code functie uitgevoerd, en welke parameter krijgt hij mee?
Doe voor de gein eens een 'echo $code;' in de functie...

(HINT: Als uitvoer krijg je dan waarschijnlijk \\1 )
Ja maar dat vat ik juist niet, het zou bijv. toch zo moeten uitpakken:

PHP:
1
2
3
4
<?php
//op form ingevuld: [code]blaaaaat[/code]
$input = preg_replace("/\\[code\](.*?)\\[\/code\]/msi",show_code("blaat"),$input);
?>


dan word toch de functie met parameter 'blaat' aangeroepen, en word er wat geretourneerd of.. :?

edit:

en nee beetle, die \e gaf ook geen uitkomst.. :/

ben ik nu zo dom offeuh :9

[ Voor 12% gewijzigd door Verwijderd op 23-04-2003 14:04 ]


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Wat heb je met die /e parameter gedaan dan?
Stukje voorbeeld, (had ik nog liggen :) )
PHP:
1
2
3
4
5
6
7
8
$key="hallo allemaal {hier} is harrie";
$test = preg_replace ("/\{(.*)\}/e","vervang('\\1')",$key); 
echo "erna:".$test;

function vervang($tekst){
echo "origineel:". $tekst;
return("DAAR");
}

Deze werkt!

En een tweede hint, die functieaanroep moet tussen quotes! ;)

[ Voor 22% gewijzigd door beetle71 op 23-04-2003 14:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
beetle71 schreef op 23 April 2003 @ 14:14:
Wat heb je met die /e parameter gedaan dan?
Stukje voorbeeld, (had ik nog liggen :) )
PHP:
1
2
3
4
5
6
7
8
$key="hallo allemaal {hier} is harrie";
$test = preg_replace ("/\{(.*)\}/e","vervang('\\1')",$key); 
echo "erna:".$test;

function vervang($tekst){
echo "origineel:". $tekst;
return("DAAR");
}

Deze werkt!

En een tweede hint, die functieaanroep moet tussen quotes! ;)
ahh dat was het probleem, had nl die /e parameter toegevoegd, (op de juiste plaats jah :P) maar die quotes vergeten..

iig bedankt allemaal, weet weer ietsje meer als net :D

_/-\o_
Pagina: 1