Skip to content
Advertisement

PHP – strtr function with array not working

I am currently migrating a WordPress website to a new system I just created. I zipped the project and uploaded it to the server via WinSCP. A lot of the image filenames contain accents(e.g é) but didn’t retain the accents after unzipping.

For example Nestlé-Coffee-Mate-Chocolat-Crème-425g.jpg` became

Nestl#U00e9-Coffee-Mate-Chocolat-Cr#U00e8me-425g.jpg

on the server.

I am trying to write a script to read all the image files and rename them so that they get their accents back.

Based off this solution, I am trying something like this:

public function rename() {
        $photos = array_diff(scandir(FCPATH . 'images/test' ), ['.', '..']);

        $utf8_ansi2 = array(
            "#u00c0" =>"À",
            "#u00c1" =>"Á",
            "#u00c2" =>"Â",
            "#u00c3" =>"Ã",
            "#u00c4" =>"Ä",
            "#u00c5" =>"Å",
            "#u00c6" =>"Æ",
            "#u00c7" =>"Ç",
            "#u00c8" =>"È",
            "#u00c9" =>"É",
            "#u00ca" =>"Ê",
            "#u00cb" =>"Ë",
            "#u00cc" =>"Ì",
            "#u00cd" =>"Í",
            "#u00ce" =>"Î",
            "#u00cf" =>"Ï",
            "#u00d1" =>"Ñ",
            "#u00d2" =>"Ò",
            "#u00d3" =>"Ó",
            "#u00d4" =>"Ô",
            "#u00d5" =>"Õ",
            "#u00d6" =>"Ö",
            "#u00d8" =>"Ø",
            "#u00d9" =>"Ù",
            "#u00da" =>"Ú",
            "#u00db" =>"Û",
            "#u00dc" =>"Ü",
            "#u00dd" =>"Ý",
            "#u00df" =>"ß",
            "#u00e0" =>"à",
            "#u00e1" =>"á",
            "#u00e2" =>"â",
            "#u00e3" =>"ã",
            "#u00e4" =>"ä",
            "#u00e5" =>"å",
            "#u00e6" =>"æ",
            "#u00e7" =>"ç",
            "#u00e8" =>"è",
            "#u00e9" =>"é",
            "#u00ea" =>"ê",
            "#u00eb" =>"ë",
            "#u00ec" =>"ì",
            "#u00ed" =>"í",
            "#u00ee" =>"î",
            "#u00ef" =>"ï",
            "#u00f0" =>"ð",
            "#u00f1" =>"ñ",
            "#u00f2" =>"ò",
            "#u00f3" =>"ó",
            "#u00f4" =>"ô",
            "#u00f5" =>"õ",
            "#u00f6" =>"ö",
            "#u00f8" =>"ø",
            "#u00f9" =>"ù",
            "#u00fa" =>"ú",
            "#u00fb" =>"û",
            "#u00fc" =>"ü",
            "#u00fd" =>"ý",
            "#u00ff" =>"ÿ"
        );

        foreach ($photos as $photo) {          
            $newFilename = strtr($photo, $utf8_ansi2);
            var_dump($newFilename); die;

            rename (FCPATH . 'images/test/' . $photo, FCPATH . 'images/test/' . $newFilename);
        }
    }

For testing purposes I created a folder test and put only one file in it, but the var_dump after using strtr still returns

Nestl#U00e9-Coffee-Mate-Chocolat-Cr#U00e8me-425g.jpg

Advertisement

Answer

strtr is case sensitive. Maybe this will help you.

Your array contains lowercase u’s, your file name uppercase ones.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement