Richard Lynch wrote:
> On Mon, June 4, 2007 9:02 am, Dave M G wrote:
>> I've read on the manual that it's "preferred to code with magic quotes
>> off and to instead escape the data at runtime, as needed":
>>
>> Recently, while configuring my PHP so as to install the GD libraries,
>> that the default option was to have magic quotes turned on.
>
> What version of PHP did you install?...
>
> I'm pretty sure they turned MQ off by default in PHP5...
>
>> I just want to double check here what to do. Should I disable magic
>> quotes on my server?
>
> YES!
>
> Turn the dang thing off!
>
>> Also, I'm developing code that I hope others can use. For the purposes
>> of portability, is it safe to assume that most environments will have
>> magic quotes off, and build for that?
>
> Nope.
>
> Use something not unlike:
> if (ini_get('magic_quotes_gpc')){
> array_map('stripslashes', $_GET);
> array_map('stripslashes', $_POST);
> array_map('stripslashes', $_COOKIE);
> array_map('stripslashes', $_REQUEST);
> }
a few problems with this:
1. array_map doesn't change the input array(s) - so in this example, $_GET et
al are not actually
changed.
2. there is a fair chance that these arrays may sometimes contain subarrays and
it's therefore
necessary to actually recurse into any found subarrays and perform stripslashes
on each
value found there.
I would suggest something like (although this is untested, I'm not 100% sure
the 'by reference' 2nd
argument is done in the correct manner and there may also be restrictions as to
using functions
like array_walk_recursive() on super global varaibles):
$ss = 'stripslashes';
array_walk_recursive($_GET, &$ss);
so alternatively (a method I know for sure does work - but is a little less
clean, given it uses assignment and
a userland recursive function):
function ssRecursive($v) {
return is_array($v) ? array_map('ssRecursive', $v) : stripslashes($v);
}
$_GET = ssRecursive($_GET);
>
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php