DokuWiki

It's better when it's simple

Ferramentas do usuário

Ferramentas do site


pt-br:tips:romanize

Dicas e Truques

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);
}
 
?>
1)
veja deaccent e romanization para maiores informações
pt-br/tips/romanize.txt · Última modificação: 2021-01-07 18:15 por coldscientist

Exceto onde for informado ao contrário, o conteúdo neste wiki está sob a seguinte licença: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki