Skip to content

Instantly share code, notes, and snippets.

@remcotolsma
Created September 4, 2014 11:15
Show Gist options
  • Save remcotolsma/aa74746f2f632091298c to your computer and use it in GitHub Desktop.
Save remcotolsma/aa74746f2f632091298c to your computer and use it in GitHub Desktop.
WordPress fix accented filenames
<?php
// @see http://m.cg/post/75387759734/fix-accented-filenames-on-linux-with-convmv
// @see http://www.i18nqa.com/debug/utf8-debug.html
/**
* Súd-Sûdan.jpg
* Súd-Sûdan.jpg
* Súd-Sûdan.jpg
*/
define( 'WP_USE_THEMES', false );
require './wp-blog-header.php';
// Global
global $wpdb;
// Upload dir
$upload_dir = wp_upload_dir();
$basedir = $upload_dir['basedir'];
// Rename flag
$rename = true;
// Chars
$chars = array(
'Â', 'Ã', 'Ä', 'À', 'Á', 'Å', 'Æ',
'Ç',
'È', 'É', 'Ê', 'Ë',
'Ì', 'Í', 'Î', 'Ï',
'Ð',
'Ñ',
'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø',
'Ù', 'Ú', 'Û', 'Ü',
'Ý',
'Þ',
'ß',
'à', 'á', 'â', 'ã', 'ä', 'å', 'æ',
'ç',
'è', 'é', 'ê', 'ë',
'ì', 'í', 'î', 'ï',
'ð',
'ñ',
'ò', 'ó', 'ô', 'õ', 'ö', 'ø',
'ù', 'ú', 'û', 'ü',
'ý',
'þ',
'ÿ',
);
$conditions = array();
foreach ( $chars as $char ) {
$conditions[] = $wpdb->prepare( '( meta_value LIKE %s COLLATE utf8_bin ) ', '%' . $char . '%' );
}
$query_condition = implode( $conditions, ' OR ' );
// Query
$query = "
SELECT
post_id,
meta_value AS file
FROM
$wpdb->postmeta
WHERE
meta_key = '_wp_attached_file'
AND
(
$query_condition
)
;
";
$results = $wpdb->get_results( $query );
// Files
foreach ( $results as $result ) {
$filename = $basedir . '/' . $result->file;
echo $result->post_id, ' - ', $filename, '<br />';
if ( is_readable( $filename ) ) {
printf( '- File <code>%s</code> exists.<br />', $filename );
} else {
printf( '- File <code>%s</code> does not exists.<br />', $filename );
$file_actual = iconv( 'ISO-8859-1', 'UTF-8', $result->file );
$filename_actual = $basedir . '/' . $file_actual;
if ( is_readable( $filename_actual ) ) {
printf( '- File <code>%s</code> exists.<br />', $filename_actual );
if ( $rename ) {
$renamed = rename( $filename_actual, $filename );
if ( $renamed ) {
printf( '- Renamed <code>%s</code> to <code>%s</code>.<br />', $filename_actual, $filename );
} else {
printf( '- Could not rename <code>%s</code> to <code>%s</code>.<br />', $filename_actual, $filename );
}
}
} else {
printf( '- File <code>%s</code> does not exists.<br />', $filename_actual );
$glob = str_replace( $chars, '*', $result->file );
$path = $basedir . '/' . $glob;
printf( '- - Try glob <code>%s</code><br />', $glob );
$files = glob( $path );
if ( $files ) {
foreach ( $files as $f ) {
printf( ' - - Found <code>%s</code><br />', $f );
}
if ( 1 == count( $files ) ) {
$filename_actual = $files[0];
if ( $rename ) {
$renamed = rename( $filename_actual, $filename );
if ( $renamed ) {
printf( '- - Renamed <code>%s</code> to <code>%s</code>.<br />', $filename_actual, $filename );
} else {
printf( '- - Could not rename <code>%s</code> to <code>%s</code>.<br />', $filename_actual, $filename );
}
}
}
}
}
}
echo '<br />';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment