ID: 20221 Updated by: [EMAIL PROTECTED] Reported By: panacode at skynet dot be Status: Bogus Bug Type: Strings related Operating System: Linux PHP Version: 4.2.3 New Comment:
In php_str_replace_in_subject(), if a value in the search array is of 0 length, the search array internal pointer is moved ahead, but not the replace array. Shouldn't they both be moved ahead? This would produce the results panacode is expecting, but it would break BC, but I don't see any documentation that covers this behaviour. Unless I'm blind, of course, which I may be. J Previous Comments: ------------------------------------------------------------------------ [2003-06-19 16:29:17] heinz at hhombergs dot de 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. ------------------------------------------------------------------------ [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