Probleem met vervangen php
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,
Gewijzigd op 16/04/2014 20:25:01 door 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?
Dit was wat ik wou bekomen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
$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;
// 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
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...
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.
Code (php)
1
$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!
idd :)
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?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())";
?>
$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!
Ik vind het wel knap van je dat je een simpele str_replace over 6 regels kunt uitstrijken.
Versus
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?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;
?>
$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 :)