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