login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Probleempje/vraag ivm htmlspecialchars();

Offline StriKe - 02/09/2004 07:59
Avatar van StriKeHTML interesse Hallo,

Ik heb via een inputbox zowel gewone tekst (opgemaakt met html code) als html code zelf geschreven.

Daarmee bedoel ik dat in sommige stukken de html wel degelijk uitgevoerd moet worden, in andere delen moet deze dan weer gewoon afgebeeld worden zoals ik hem heb ingetypt.

htmlspecialchars(); zou een oplossing kunnen bieden, maar probleem is dat hij dan ALLE html gaat afbeelden, dus ook degene die bij mij de opmaak van m'n pagina verzorgd ...

Kan ik met deze functie (of een andere binnen php) niet ervoor zorgen dat slechts bepaalde delen geconverteerd worden dmv die delen die ik wil converteren te omsluiten met een bepaald teken.

Bijvoorbeeld alles binnen [ en ] moet met htmlspecialchars bewerkt worden, de rest niet.
Is dit mogelijk? en zo ja, hoe?

Groeten,
StriKe

11 antwoorden

Gesponsorde links
Offline CelestialCelebi - 02/09/2004 09:34
Avatar van CelestialCelebi PHP gevorderde
  1. <?php
  2. $x = preg_replace_callback('/\[(.*)\]/i', 'htmlspecialchars("\\1")', $x);
  3. ?>


Werkt dit niet? Probeer anders wat uit, als het niet werkt..
Offline Thomas - 02/09/2004 09:57
Avatar van Thomas Moderator preg_replace_callback() ?
Is dat hetzelfde als preg_replace met de /e switch ?

Lijkt er wel op.
Offline CelestialCelebi - 02/09/2004 10:05 (laatste wijziging 02/09/2004 10:05)
Avatar van CelestialCelebi PHP gevorderde Eh, ja, klopt. Maar ik ben tegen eval(), dus dan krijg je zoiets.. Hehehe
Offline StriKe - 02/09/2004 10:27
Avatar van StriKe HTML interesse Heb de functie zonder callback gebruikt (deze gaf een error) en dus leverde dit me volgende code op

<?php
$x = preg_replace('/\[(.*)\]/i', 'htmlspecialchars("\\1")', $x);
?>

Als ik [<hr>] wou omzetten gaf hij dit terug:
htmlspecialchars("") met tussen "" de uitvoering van hr, er stond dus wel degelijk een lijn.

<?php
$x = preg_replace('/\[(.*)\]/i', htmlspecialchars("\\1"), $x);
?>

Dit leverde op de plaats van [<hr>] gewoon de uitvoering van hr (een lijn dus) op.

Iemand raad? 

Groeten,
StriKe
Offline CelestialCelebi - 02/09/2004 10:29
Avatar van CelestialCelebi PHP gevorderde Ja, hehe. Je moet natuurlijk wel die preg_replace_callback() gebruiken he..

Maar er moest nog een s achter de i...

  1. <?php
  2. $x = preg_replace_callback('/\[(.*)\]/is', 'htmlspecialchars("\\1")', $x);
  3. ?>
Offline Scott - 02/09/2004 14:42
Avatar van Scott Gouden medaille

PHP ver gevorderde
Als ik me niet vergis, dan moet het zo:

  1. <?php
  2. $x = preg_replace_callback('/\[(.*)\]/is', htmlspecialchars("\\1"), $x);


Let op de ' voor en na htmlspecialchars. Het wordt nl. niet uitgevoerd als er ' om heen staan.. ;)
Offline StriKe - 02/09/2004 15:29
Avatar van StriKe HTML interesse Hallo Scott,

Met de code die jij hebt gegeven krijg ik onderstaande php-error:

Warning: preg_replace_callback() requires argument 2, 'htmlspecialchars("\1")', to be a valid callback in c:\server_root\www\test\internetfreakz.be\scripts\toonbericht.php on line 46

Lijn 46 is de lijn met de preg_replace_callback functie.
Ook wordt buiten die foutmelding de html code gewoon uitgevoerd, ze wordt dus niet afgebeeld.

Groeten,
StriKe
Offline CelestialCelebi - 02/09/2004 16:56
Avatar van CelestialCelebi PHP gevorderde Nee, niet die quotes weghalen. Het is geen functie. Het is een argument en dat wordt door preg_replace_callback() gebruikt als functie ja.

Doet ie 't nu al? Ik ga wel even testen anders.
Offline StriKe - 02/09/2004 17:00
Avatar van StriKe HTML interesse Hello,

Als ik de quotes plaats geeft hij dit:

Warning: preg_replace_callback() requires argument 2, 'htmlspecialchars("\1")', to be a valid callback in c:\server_root\www\test\internetfreakz.be\scripts\toonbericht.php on line 46

Lijn 46 is nog steeds die met de functie preg_replace_callback in.

Verder ook nog dit:
[<hr>] wordt afgebeeld als [] waarbij tussen die haken de html code uitgevoerd wordt (ze wordt dus niet afgedrukt)

Groeten,
StriKe
Offline CelestialCelebi - 02/09/2004 17:03
Avatar van CelestialCelebi PHP gevorderde Deze werkt wel:

  1. <?php
  2. $sString = 'Hallo [<b>x</b>] Hoi';
  3.  
  4. echo preg_replace('/\[(.*)\]/ie', '"[" . htmlspecialchars("\\1") . "]"', $sString);
  5. ?>


Ik snap 't ook niet helemaal..
Offline StriKe - 02/09/2004 17:35
Avatar van StriKe HTML interesse Hello,

Helemaal snap ik het ook niet maar met jouw oplossing stond er nog iedere keer [] rond de html code, heb ik simpelweg opgelost door die [ en ] uit jouw lijn te verwijderen maar wel de aanhalingstekens te laten staan 

Dus: thx voor alle hulp, ik heb bereikt wat ik wou bereiken!

Groeten,
StriKe
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.193s