[Bug 732306] Re: php escapeshellarg removes £ incorrectly

Clint Byrum clint at fewbar.com
Thu Mar 10 02:51:54 UTC 2011


This appears to have been fixed some time between 5.3.2 and 5.3.5:


clint at clint-MacBookPro:~$ php -f test_pound2.php
string(26) "!+_£@#&;`|*?~<>^()[]{}$\,"
string(28) "'!+_£@#&;`|*?~<>^()[]{}$\,'"
string(1) "'"
string(1) "!"
string(1) "+"
string(1) "_"
string(1) "�"
string(1) "�"
string(1) "@"
string(1) "#"
string(1) "&"
string(1) ";"
clint at clint-MacBookPro:~$ php --version
PHP 5.3.5-1ubuntu1 with Suhosin-Patch (cli) (built: Feb 22 2011 16:51:15) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

vs.

(lucid-amd64)clint at clint-MacBookPro:~$ php -f test_pound2.php 
string(26) "!+_£@#&;`|*?~<>^()[]{}$\,"
string(26) "'!+_@#&;`|*?~<>^()[]{}$\,'"
string(1) "'"
string(1) "!"
string(1) "+"
string(1) "_"
string(1) "@"
string(1) "#"
string(1) "&"
string(1) ";"
string(1) "`"
string(1) "|"
(lucid-amd64)clint at clint-MacBookPro:~$ php --version
PHP 5.3.2-1ubuntu4.7 with Suhosin-Patch (cli) (built: Jan 12 2011 18:36:55) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

It goes a bit deeper though.. there is a workaround for lucid's php:

string(1) "C"
string(26) "!+_£@#&;`|*?~<>^()[]{}$\,"
string(28) "'!+_£@#&;`|*?~<>^()[]{}$\,'"
string(1) "'"
string(1) "!"
string(1) "+"
string(1) "_"
string(1) "�"
string(1) "�"
string(1) "@"
string(1) "#"
string(1) "&"
string(1) ";"
(lucid-amd64)clint at clint-MacBookPro:~$ cat test_pound2.php 
<?php
var_dump(setlocale(LC_CTYPE, NULL));
setlocale(LC_CTYPE, "en_US.UTF-8");
// test script
$before = '!+_£@#&;`|*?~<>^()[]{}$\,';

var_dump($before);

$escaped = escapeshellarg($before);

var_dump($escaped);

for ($i=0; $i < 10; $i++)
{
 var_dump($escaped[$i]);
}

?>

This shows that the language was C (because I was in a minimal chroot
probably). I installed langauge-pack-en and then this script started
showing the pound symbol properly. So the real issue is making sure your
locale is set to UTF-8. This is the exact suggestion of the first
comment on http://us3.php.net/escapeshellarg

Given all of this, I think this isn't a bug that we're going to fix or
even can.. users need to be explicit about their locale if they expect
characters specific to that locale to work.

Marking as Won't Fix.

** Changed in: php5 (Ubuntu)
       Status: New => Won't Fix

-- 
You received this bug notification because you are a member of Ubuntu
Server Team, which is subscribed to php5 in ubuntu.
https://bugs.launchpad.net/bugs/732306

Title:
  php escapeshellarg removes £ incorrectly



More information about the Ubuntu-server-bugs mailing list