Hallo iedereen,

Ik heb een vraagje over vervangen dus ik wil ' vervangen door \' omdat dat een bug fixed die je krijgt met text editors en zonder dit wat ik hier nu vraag

Vriendelijke groet,
Jasper De Moor,
Kan je wat meer vertellen over de opzet waarin het optreedt? Is het data die je in een database opslaat, of ergens anders?
Laat maar kheb het zelf al gevonden was veel makkelijker dan ik dacht :/

Dit was wat ik wou bekomen:

$content=$_POST['reply_content'];
		
		// Order of replacement
		$str     = $content;
		$order   = array("'");
		$replace = "\'";

		// Processes \r\n's first so they aren't converted twice.
		$newstr = str_replace($order, $replace, $str);
		
		$content = $newstr;


Dus het is gefixt :)
Toch dankje
maar de vraag blijft, welk probleem je nu gefixt hebt.

gaat het anders mis bij je database?
Zo ja, dan is het verstandig om de database eigen functies te gebruiken om dit probleem op te lossen.

Bijvoorbeeld mysql_real_escape_string(). Die pakt ook nog andere tekens aan.

En niet elke database lost dit probleem op met een \

Maar goed, pas als je verraadt wat het probleem was...
Het probleem lag bij de php
Dus ik typte dus een text in mijn tiny_mce editor en dan kreeg ik een error dat vanalles niet meer klopte zoals mijn functies om gebruikersnamen enzo te krijgen omdat er een paar dingen kapot waren door de ' in de text.


$sql = "INSERT INTO posts (category_id, topic_id, post_creator, post_content, post_date) VALUES ('".$cid."', '".$tid."', '".$creator."', '".$reply_content."', now())"; //dus zoals je ziet gebruik ik '".$reply_content."' en omdat mijn reply content variable zelf een ' bevat was het helemaal kapot =/ het lag dus niet aan de database


Hopelijk versta je mijn probleem nu al beter en kan je eventuele dingen uitleggen die ik misschien over het hoofd zag met deze fix :)
Ik begrijp 'm, die "'"s verprutsen Tiny MCE bij mij ook. preg_replace doet wonderen!
dat los je dus zo op:

<?php

$sql = "INSERT INTO posts (category_id, topic_id, post_creator, post_content, post_date)
VALUES ('".mysql_real_escape_string($cid)."',
'".mysql_real_escape_string($tid)."',
'".mysql_real_escape_string($creator)."',
'".mysql_real_escape_string($reply_content)."',
now())";

?>

en niet alleen vanwege de reden die je ziet, maar ook omdat mensen hier misbruik van maken:

http://wiki.pfz.nl/sqlinjectie
Real escape string doet wonderen!
Of, zoals al is gezegd, real_escape_string gebruiken.
Ik vind het wel knap van je dat je een simpele str_replace over 6 regels kunt uitstrijken.

<?php
$content = str_replace("'", "\'", $_POST['reply_content']);
?>

Versus

<?php
$content=$_POST['reply_content'];

// Order of replacement
$str = $content;
$order = array("'");
$replace = "\'";

// Processes \r\n's first so they aren't converted twice.
$newstr = str_replace($order, $replace, $str);

$content = $newstr;
?>
michael ik vond het overzichtelijker in 6 regels maar kga zoals al gezegd dan toch real excape string gebruiken :)

Reageren