Tuesday, 15 September 2015

bash - PHP filename encoding conversion issue -



bash - PHP filename encoding conversion issue -

i'm trying batch rename files in folder php. it's working, though i'm having problems accented characters.

an illustration of filename accented characters Åre_grÖn.jpg.

i rename file are_gron.jpg.

if read files in this:

<?php $path = __dir__; $dir_handle = opendir($path); while ($file = readdir($dir_handle)) { echo $file . "\n"; } closedir($dir_handle);

...and page displays åre_grön.jpg.

if add together header('content-type: text/html; charset=utf-8'); origin of script, displays right file name, rename() function seems have no effect either way.

here's i've tried:

while ($file = readdir($dir_handle)) { rename($file, str_replace('ö', 'o', $file)); # no effect rename($file, str_replace('Ö', 'o', $file)); # no effect }

where going wrong?

do if believe i'm using wrong tool job. if knows how accomplish bash script, show me. have no bash chops.

i figured out how it.

i first ran urlencode() on filename. converts string:

mÖrkgrÅ.jpg

to url friendly:

mo%cc%88rkgra%cc%8a.jpg

i ran str_replace() on url-encoded string, providing needles , haystacks in arrays. needed few swedish characters, solution looked this:

<?php header('content-type: text/html; charset=utf-8'); $path = __dir__; $dir_handle = opendir($path); while ($file = readdir($dir_handle)) { $search = array('a%cc%8a', 'a%cc%88', 'o%cc%88'); $replace = array('a', 'a', 'o'); rename($file, str_replace($search, $replace, urlencode($file))); } closedir($dir_handle);

job done :)

i've come realise more versatile anticipated. running script, url_encode() gave me different output, it's easy alter accordingly.

$search = array('%26aring%3b', '%26auml%3b', '%26ouml%3b', '+'); $replace = array('a', 'a', 'o', '_');

php bash

No comments:

Post a Comment