• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

-IceBurn-

[PHP]function FormalizarCaracteres()

9 mensagens neste tópico

Boas!

Como devem saber,é aconselhável um documento, seja html, php, etc utilizar-se 'ã' em vez de 'ã', ´ em vez de 'á', etc...

Para quem não sabe do que estou a falar:Character entity references

Assim, e como gosto de ler facilmente o texto enquanto elaboro um trabalho e tambem porque torna-se uma perda de tempo estar

a escrever um texto utilizando manulamente este método, tive a necessidade de desenvolver uma função que o fizesse por mim, depois

de ter o trabalho, basta-me correr a função indicando o nome do ficheiro actual e no segundo parametro, o nome pretendido para o novo ficheiro.

É uma função muitíssimo simples, mas que faz exactamente o que eu pretendo.

Em sistemas unix pode dar problemas devido as permissões, de qualquer maneira

já incluí no código alterações nas permissões dos ficheiros, o que em windows é

absolutamente desnecessário.

Assim, aqui fica o resultado:

<?php
// /////////////////////////////////////////////////////////////////////////// //
//FormalizarCaracteres( ficheiro original, novo ficheiro, [substituir (1=sim)])//
//             Elaborado por =IceBurn= - www.jrfreelancer.com                  //
// /////////////////////////////////////////////////////////////////////////// //

error_reporting(E_ALL); // ;-)

function FormalizarCaracteres($antigo, $novo, $substituir = NULL) {

if(!file_exists($novo)) {
   touch($novo);
  }

chmod($novo, 0777);

$fc = fopen($novo, "a+");

foreach(file($antigo) as $linha) {
     
      $linha = str_replace("á", "á", $linha);
      $linha = str_replace("à", "à", $linha);
      $linha = str_replace("ã", "ã", $linha);
      $linha = str_replace("â", "â",  $linha);
     
      $linha = str_replace("Á", "Á", $linha);
      $linha = str_replace("À", "À", $linha);
      $linha = str_replace("Ã", "Ã", $linha);
      $linha = str_replace("Â", "Â",  $linha);

      $linha = str_replace("ç", "ç", $linha);
      $linha = str_replace("Ç", "Ç", $linha);

      $linha = str_replace("é", "é", $linha);
      $linha = str_replace("è", "è", $linha);
      $linha = str_replace("ê", "ê",  $linha);

      $linha = str_replace("É", "É", $linha);
      $linha = str_replace("È", "È", $linha);
      $linha = str_replace("Ê", "Ê",  $linha);
     
      $linha = str_replace("í", "í", $linha);
      $linha = str_replace("ì", "ì", $linha);

      $linha = str_replace("Í", "Í", $linha);
      $linha = str_replace("Ì", "Ì", $linha);

      $linha = str_replace("ó", "ó", $linha);
      $linha = str_replace("ò", "ò", $linha);
      $linha = str_replace("ô", "ô",  $linha);
      $linha = str_replace("õ", "õ", $linha);

      $linha = str_replace("Ó", "Ó", $linha);
      $linha = str_replace("Ò", "Ò", $linha);
      $linha = str_replace("Ô", "Ô",  $linha);
      $linha = str_replace("Õ", "Õ", $linha);

      $linha = str_replace("ú", "ú", $linha);
      $linha = str_replace("Ú", "Ú", $linha);

  fwrite($fc, "$linha");
}
     
  fclose($fc);

if($substituir) {
   
   chmod($antigo, 0777);
   unlink($antigo);
   
   rename($novo, $antigo); 
   $novo = $antigo;

}

chmod($novo, 0644);
}

/* 

EXEMPLO DE UTILIZAÇÃO 

- Corrigir o ficheiro e manter o antigo:
  
   FormalizarCaracteres("teste.php", "NOVO_teste.php");


- Corrigir o ficheiro e eliminar o antigo 
  (O novo ficheiro é renomeado com o nome do antigo):
  
   FormalizarCaracteres("teste.php", "NOVO_teste.php", 1);

*/ 

?>

Espero que seja útil a alguem ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E que tal utilizar a função htmlentities(); ?

Não, porque eu apenas quero converter os caracteres indicados e htmlentities ia

converter tambem '<' em 'lt;' e  '>' em '>'.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E que tal utilizar a função htmlentities(); ?

Não, porque eu apenas quero converter os caracteres indicados e htmlentities ia

converter tambem '<' em 'lt;' e  '>' em '>'.

Podes indicar os caracteres 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes indicar os caracteres 

Posso indicar para aspas simples e duplas, mas não para < e >.

Tambem podia fazer a função de maneira que saltasse os <>'s mas comecei a fazer assim, e acabou por ficar.

Ok, tambem podia definir o charset, é verdade.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fiz aqui um pequeno código para veres como é que eu faria isso.. tenho a certeza que o código não funciona porque fiz tudo a correr e não esta bem indentado porque fiz no bloco de notas e tive que usar Tab.. é só para teres uma ideia... (quando entrar no linux corrijo o código windows sucks)

<?php
/////////////////////////
///// Code by kingless ///
/////////////////////////

function html_entities( $file, $new, $rename = null ) {

$fp = (!file_exists( $new )) ? fopen( $new, "xb+" ) : fopen( $new, "ab+" );

$conteudo = file_get_contents( $file );

$linha = '';
if(preg_match( '/(á|ã|â|à|é|è|ê|í|ì|î|ó|ò|ô|õ|ú|ù|û|)/i', $conteudo, $letras )) {
	foreach( $letras as $letra ) {
		$linha .= str_replace( $letra, htmlentities( $letra ), $conteudo );
		}
}

fwrite( $fp, $linha );

fclose( $fp );

if(!is_null( $rename )) {
   
   chmod($file, 0777);
   unlink( $file );
   
   rename($new, $file);
}

chmod($file, 0644);
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fiz aqui um pequeno código para veres como é que eu faria isso.. tenho a certeza que o código não funciona porque fiz tudo a correr e não esta bem indentado porque fiz no bloco de notas e tive que usar Tab.. é só para teres uma ideia... (quando entrar no linux corrijo o código windows sucks)

<?php
/////////////////////////
///// Code by kingless ///
/////////////////////////

function html_entities( $file, $new, $rename = null ) {

$fp = (!file_exists( $new )) ? fopen( $new, "xb+" ) : fopen( $new, "ab+" );

$conteudo = file_get_contents( $file );

$linha = '';
if(preg_match( '/(á|ã|â|à|é|è|ê|í|ì|î|ó|ò|ô|õ|ú|ù|û|)/i', $conteudo, $letras )) {
	foreach( $letras as $letra ) {
		$linha .= str_replace( $letra, htmlentities( $letra ), $conteudo );
		}
}

fwrite( $fp, $linha );

fclose( $fp );

if(!is_null( $rename )) {

  chmod($file, 0777);
  unlink( $file );

  rename($new, $file);
}

chmod($file, 0644);
}
?>

Se formos por aí, tambem poderia ficar qualquer coisa tipo:

<?php
function FormalizarCaracteres($antigo, $novo, $substituir = NULL) {

if(!file_exists($novo)) {
   touch($novo);
  }

chmod($novo, 0777);

$fc = fopen($novo, "a+");

foreach(file($antigo) as $linha) {
     
  $linha = preg_replace("/[(á|ã|â|à|é|è|ê|í|ì|î|ó|ò|ô|õ|ú|ù|û|)]/i", htmlentities($linha), $linha);

      fwrite($fc, "$linha");
}
     
  fclose($fc);

if($substituir) {
   
   chmod($antigo, 0777);
   unlink($antigo);
   
   rename($novo, $antigo); 
   $novo = $antigo;

}

chmod($novo, 0644);
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora