Romanizar nomes de arquivos
Palavras-chave: UTF-8, romanizar, cirílico, latino, converter, nome de arquivo
Ao atualizar de versões anteriores que ainda não tinham a função “romanizar”, você encontrará uma estrutura de diretório completamente 'ilegível'.
Por exemplo: %D0%BA%D1%8B%D1%80%D0%B3%D1%8B%D0%B7%D1%81%D1%82%D0%B0%D0%BD.txt é o mesmo que кыргызстан.txt
Isso ocorre porque os nomes de arquivo UTF-8 foram codificados (urlencode).
Em versões posteriores, a opção “romanização” foi adicionada para contornar esse problema. 1)
O script a seguir converterá essa estrutura de diretório ilegível em nomes de arquivo “romanizados”.
Você terá que incluir o arquivo UTF8.php que faz parte da instalação do DokuWiki.
Nota: este script não está livre de erros: por exemplo: existem alguns caracteres cirílicos que terminarão seu nome de arquivo com “'”. Isso ocorre porque em UTF-8.php a transliteração de 'ъ' é como “'”
Verifique sua estrutura de página após a conversão por nomes de arquivo inválidos.
Espero que isso ajude alguém. Quaisquer melhorias são bem-vindas.
Atualização: UTF8.php foi reescrito, o código abaixo só foi testado com esta versão do UTF8.php
<?php include("utf8.php"); //to be found in the \inc directory of the default dokuwiki install /** * Copy a file, or recursively copy a folder and its contents, and clean up the filenames according to the dokuwiki UTF-8 * * @original_author Aidan Lister <aidan@php.net> * @link http://aidanlister.com/repos/v/function.copyr.php * @param string $source Source path * @param string $dest Destination path * @return bool Returns TRUE on success, FALSE on failure */ function copyr($source, $dest) { $dest2=cleanID($dest); echo $source."->".$dest." ->$dest2<br/>\n"; // Simple copy for a file if (is_file($source)) { return copy($source, $dest2); } // Make destination directory if (!is_dir($dest)) { mkdir($dest2); } // Loop through the folder $dir = dir($source); while (false !== $entry = $dir->read()) { // Skip pointers if ($entry == '.' || $entry == '..') { continue; } // Deep copy directories if ($dest !== "$source/$entry") { copyr("$source/$entry", "$dest/$entry"); } } // Clean up $dir->close(); return true; } copyr("/dokuwiki/data/pages/","/dokuwiki/data/pagesnew/"); function cleanID($id,$ascii=false){ $id = trim(urldecode($id)); $id = utf8_strtolower($id); $id = utf8_romanize($id); utf8_deaccent($id,-1); $id = preg_replace('#\'+#','_',$id); return($id); } ?>