ID: 20221
Comment by: heinz at hhombergs dot de
Reported By: panacode at skynet dot be
Status: Bogus
Bug Type: Strings related
Operating System: Linux
PHP Version: 4.2.3
New Comment:
Sorry but there is a bug in the str_replace function. Reproduced under
4.2.2 and 4.3.2
function recode_charset($string,$cs_from,$cs_to) {
$trans_tbl["ASCII"] = array("&", "�", "�", "�", "�", "�", "�", "�",
"�", "�", "�", "�", "�", "", "�", "�", "�", "�", "�", "�", "�", "�",
"�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�",
"�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�",
"�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�",
"�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�",
"�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�", "�",
"�", "�", "�", "�");
$trans_tbl["UNICODE"] = array("&", "¡", "¢", "£",
"¤", "¥", "¦", "§", "¨", "©", "ª",
"«", "¬", "­", "®", "¯", "°", "±",
"²", "³", "´", "µ", "¶", "·", "¸",
"¹", "º", "»", "¼", "½", "¾", "¿",
"À", "Á", "Â", "Ã", "Ä", "Å", "Æ",
"Ç", "È", "É", "Ê", "Ë", "Ì", "Í",
"Î", "Ï", "Ð", "Ñ", "Ò", "Ó", "Ô",
"Õ", "Ö", "×", "Ø", "Ù", "Ú", "Û",
"Ü", "Ý", "Þ", "ß", "à", "á", "â",
"ã", "ä", "å", "æ", "ç", "è", "é",
"ê", "ë", "ì", "í", "î", "ï", "ð",
"ñ", "ò", "ó", "ô", "õ", "ö", "÷",
"ø", "ù", "ú", "û", "ü", "ý", "þ",
"ÿ");
$trans_tbl["HTML"] = array("&", "¡", "¢", "£",
"¤", "¥", "¦", "§", "¨", "©", "ª",
"«", "¬", "­", "®", "¯", "°", "±",
"²", "³", "´", "µ", "¶", "·",
"¸", "¹", "º", "»", "¼", "½",
"¾", "¿", "À", "Á", "Â", "Ã",
"Ä", "Å", "Æ", "Ç", "È", "É",
"Ê", "Ë", "Ì", "Í", "Î", "Ï",
"Ð", "Ñ", "Ò", "Ó", "Ô", "Õ",
"Ö", "×", "Ø", "Ù", "Ú", "Û",
"Ü", "Ý", "Þ", "ß", "à", "á",
"â", "ã", "ä", "å", "æ", "ç",
"è", "é", "ê", "ë", "ì", "í",
"î", "ï", "ð", "ñ", "ò", "ó",
"ô", "õ", "ö", "÷", "ø", "ù",
"ú", "û", "ü", "ý", "þ", "ÿ");
return str_replace($trans_tbl[$cs_from], $trans_tbl[$cs_to],
$string);
}
$string = recode_charset('�������','ASCII','HTML');
will produce ÃãÛûÕõÞ
but ÄäÜüÖöß is correct.
Previous Comments:
------------------------------------------------------------------------
[2002-11-02 17:46:51] [EMAIL PROTECTED]
Sorry, but your problem does not imply a bug in PHP itself. For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system is not the
appropriate forum for asking support questions.
Thank you for your interest in PHP.
------------------------------------------------------------------------
[2002-11-02 17:43:08] panacode at skynet dot be
Sorry for bothering (and for my writing errors).
There actually is another function in PHP that has the
behaviour that I expect: strtr(str, arr)
$vReplace['@gill'] = '@doubleyou';
$vReplace['@doubleyou'] = '@bates';
$sSubject = "@gill @doubleyou is not my friend";
$sResult = strtr($sSubject, $vReplace);
echo $sResult;
// will output "@doubleyou @bates is not my friend"
------------------------------------------------------------------------
[2002-11-02 14:22:23] [EMAIL PROTECTED]
Please try using this CVS snapshot:
http://snaps.php.net/php4-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php4-win32-latest.zip
------------------------------------------------------------------------
[2002-11-02 13:04:24] panacode at skynet dot be
str_replace when used with with arrays,
for every element in the search/replace arrays
a simple replace in the source string (rather than
using an external string) is performed.
This causes an unexpected result like
if one of the replace values includes
a search value it will be replaced in a subsequent
replacing action.
If this is a feature rather than a bug (which I doubt)
please state it in the documentation.
An example:
$vSearch[] = '@gill';
$vSearch[] = '@doubleyou';
$vReplace[] = '@doubleyou';
$vReplace[] = '@bates';
$sSubject = "@gill is my friend";
$sResult = str_replace($vSearch, $vReplace, $sSubject);
echo $sResult;
// will output "@bates is not my friend" instead
// of "@doubleyou is not my friend"
Best regards,
Eugen Fernea
IT Manager
Panacode Software
rue de la Station, 1/1
7090 Braine-Le-Comte
Belgium
E-mail: [EMAIL PROTECTED]
Phone: +32 067/48 58 94
Mobile: +32 (0)472 95 15 48
Web: http://www.panacode.com
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=20221&edit=1