Dreammonkey
asked on
XML Special Chars Issue
Hi everyone,
I made a flash-based interface website that enables me to update data in an XML-file using a PHP script.
Everything works fine, but I have some trouble with Special Characters like : '
When I enter something like "Band's" , it gets written away like this : "Band\'s" . Everytime I resave the data an extra backslash gets added, which reslults in : "Band\\\\\\'s".
Obviously this isn't the desired result. Is there anyway to avoid this?
Should I adapt my Flash script, or can this be solved by altering the PHP script?
I'm not supllying any code for now, because I think there must be some standard answers to this.
If you do want me to post the script, please let me know !
Kind Regards,
Dreammonkey
I made a flash-based interface website that enables me to update data in an XML-file using a PHP script.
Everything works fine, but I have some trouble with Special Characters like : '
When I enter something like "Band's" , it gets written away like this : "Band\'s" . Everytime I resave the data an extra backslash gets added, which reslults in : "Band\\\\\\'s".
Obviously this isn't the desired result. Is there anyway to avoid this?
Should I adapt my Flash script, or can this be solved by altering the PHP script?
I'm not supllying any code for now, because I think there must be some standard answers to this.
If you do want me to post the script, please let me know !
Kind Regards,
Dreammonkey
Most likely the so called magic quotes http://us3.php.net/magic_quotes are enabled on the server resulting in a \ being automatically added to all POST and GET variables. You can use the stripslashes function http://us3.php.net/manual/en/function.stripslashes.php to remove them, e.g. when you are saving the variable:
// Prior to saving the data check if magic quotes are enabled, if yes remove the
// automatically added \
if (get_magic_quotes_gpc() == 1) {
$sYourVariable = stripslashes($sYourVariabl e);
}
// Prior to saving the data check if magic quotes are enabled, if yes remove the
// automatically added \
if (get_magic_quotes_gpc() == 1) {
$sYourVariable = stripslashes($sYourVariabl
}
B-)) I had written that a long time ago...
When reading the string or getting it from get/post/cookie or mysql : use fn_Corrige_Slashes which will remove slashes if needed (this depends on the setting of get_magic_quotes_gpc)
When saving the string in Mysql: it is usually escaped as needed, so no action is required
One of the problems is that get_magic_quotes_gpc setting changes form system to system or even version. Using a "defensive programming" like this function will ensure that not only it does work on your current config, bt also that it should work in other configurations.
Not sure how this is affected by Flash though... some experimentation might be needed!
When reading the string or getting it from get/post/cookie or mysql : use fn_Corrige_Slashes which will remove slashes if needed (this depends on the setting of get_magic_quotes_gpc)
When saving the string in Mysql: it is usually escaped as needed, so no action is required
One of the problems is that get_magic_quotes_gpc setting changes form system to system or even version. Using a "defensive programming" like this function will ensure that not only it does work on your current config, bt also that it should work in other configurations.
Not sure how this is affected by Flash though... some experimentation might be needed!
ASKER
Right guys,
thanks a lot, You're solutions all seem to be PHP-minded, which is OK. I would have liked a AS-based answer but hey, you can't win 'm all...
So LordofPorts, you litle function there seems highly transparant. Should I emplement it on all my Variables like in the code below?
thanks a lot, You're solutions all seem to be PHP-minded, which is OK. I would have liked a AS-based answer but hey, you can't win 'm all...
So LordofPorts, you litle function there seems highly transparant. Should I emplement it on all my Variables like in the code below?
<?php
$id = $_POST['id'];
$band = $_POST['band'];
$day = $_POST['day'];
$month = $_POST['month'];
$year = $_POST['year'];
$venue = $_POST['venue'];
$time = $_POST['time'];
$info = $_POST['info'];
$address = $_POST['address'];
$location = $_POST['location'];
$moreInfo = $_POST['moreInfo'];
$link1 = $_POST['link1'];
$link2 = $_POST['link2'];
if (get_magic_quotes_gpc() == 1) {
$sid = stripslashes($sid);
$sband = stripslashes($sband);
$sday = stripslashes($sday);
// and so on .... ?
}
if (file_exists('gigs.xml'))
{
$xml = simplexml_load_file('gigs.xml');
$newgig = $xml->addchild('gig');
$newgig->addAttribute('id', $id);
$newgig->addAttribute('band', $band);
$newgig->addAttribute('day', $day);
$newgig->addAttribute('month', $month);
$newgig->addAttribute('year', $year);
$newgig->addAttribute('venue', $venue);
$newgig->addAttribute('time', $time);
$newgig->addAttribute('info', $info);
$newgig->addAttribute('address', $address);
$newgig->addAttribute('location', $location);
$newgig->addAttribute('moreInfo', $moreInfo);
$newgig->addAttribute('link1', $link1);
$newgig->addAttribute('link2', $link2);
}
echo $xml->asXML('gigs.xml');
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
LordOfPorts, you rock !
I use the following functions:
function fn_Corrige_slashes ($debut) {
$tmp = is_scalar($debut)?
fn_scalaire_Corrige_slashe
:array_map_recursive('fn_s
return $tmp;
}
function fn_scalaire_Corrige_slashe
$tmp=trim($debut);
// echo "dans corrige [$tmp] --- ";
if (get_magic_quotes_gpc()) {
$tmp= stripslashes($tmp);
};
// echo "corrslashes ? av|$debut| après|$tmp|<br>";
return $tmp;
}