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

Reply via email to