Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wagner Martins - SC

Função para tirar acentos

Recommended Posts

Olá pessoal,

 

Estou com um problema para implementar uma função de PHP que tira a acentuação e espaços do nome da imagem.

 

Meu código que fiz é esse:

 

$file = $_FILES['Filedata'];
$album = (int) $_POST['id'];
$filename = $file['name'];

function retirar_acentos($string){
     $a = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿRr';
     $b = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';
     $string = utf8_decode($string);
     $string = strtr($string, utf8_decode($a), $B); // Retira os Acentos das Letras.
     $string = str_replace(" ","-",$string); // Retira os Espaços.
     $string = strtolower($string); // Transforma tudo para Minúsculo.
     return utf8_encode($string); // Retorna a String transformada
}


$query = "INSERT INTO albums_photos (album, file) VALUES ('$album', '$filename')";

mysql_query($query);

$path     = $file['tmp_name'];
$new_path = "../../uploads/".$filename;

move_uploaded_file($path, $new_path);

// Vamos usar a biblioteca WideImage para o redimensionamento das imagens
require("../../lib/WideImage/WideImage.php");

// Carrega a imagem enviada
$original = WideImage::load($new_path);

// Redimensiona a imagem original para 1024x768 caso ela seja maior que isto e salva
$original->resize(500, 375, 'inside', 'down')->saveToFile(retirar_acentos($new_path), null, 90);

// Cria a miniatura
$ext = end(explode(".", $new_path)); // Pega a extensão do arquivo
$thumb = str_replace(".$ext", "_thumb.$ext", $new_path); // Substitui a extensão

$original->resize(120, 90, 'inside', 'down')->saveToFile(retirar_acentos($thumb), null, 90); // Redimensiona e salva

echo mysql_insert_id(); // Retorna o id da foto

 

Eu estou chamando a função retirar_acentos nessas duas linhas, mais não esta fazendo nada no nome da imagem:

 

// Redimensiona a imagem original para 1024x768 caso ela seja maior que isto e salva
$original->resize(500, 375, 'inside', 'down')->saveToFile(retirar_acentos($new_path), null, 90);

 

$original->resize(120, 90, 'inside', 'down')->saveToFile(retirar_acentos($thumb), null, 90); // Redimensiona e salva

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma dica é você substituir o nome da imagem por um hash,

 

ex.: md5( time() );

Compartilhar este post


Link para o post
Compartilhar em outros sites

iconv

 

<?php

echo str_replace( ' ', '_', preg_replace( '/[`^~\'"]/', null, iconv( 'UTF-8', 'ASCII//TRANSLIT', 'àáâãäåæ çèéêë   ìíîïðñòóôõöø ùúûüý' ) ) ); 

// aaaaaaae_ceeee___iiiidnoooooo_uuuuy

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
/**
* Removes spaces, special characters and replaces spaces for hyphen
* @author Matheus Tavares <contato[@]matheustavares.com.br>
* @param string	$string		The string which will be cleaned
* @return string
*/
function slug( $string ) {
if( is_string( $string ) ):
	$string = strtolower( trim( utf8_encode( $string ) ) );
	$replace = array(
		'/[^a-z0-9.-]/'	=> '-',
		'/\-{2,}/'		=> ''
	);
	$string = preg_replace( array_keys( $replace ) , array_values( $replace ) , $string );
endif;
return $string;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Matheus Tavares

 

Essa função retira os caracteres que possuem acentuação em vez de apenas remover o acento

 

Uma verdade inconveniente, ehhe. Mesmo achando indiferente, lá vai outra versão:

 

<?php
/**
* Removes spaces, special characters and replaces spaces for hyphen
* @author Matheus Tavares <contato[@]matheustavares.com.br>
* @param string        $string         The string which will be cleaned
* @return string
*/
function slug( $string ) {
       if( is_string( $string ) ):
               $string = strtolower( trim( utf8_decode( $string ) ) );

	$before	= 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿRr';
	$after	= 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';		
	$string = strtr( $string , utf8_decode( $before ) , $after );

               $replace = array(
                       '/[^a-z0-9.-]/' => '-',
                       '/\-{2,}/'           => ''
               );
               $string = preg_replace( array_keys( $replace ) , array_values( $replace ) , $string );
       endif;
       return $string;
}

echo slug( 'éste é um téçte côm açêntôs' );

 

Retorno: este-e-um-tecte-com-acentos

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função htmlentities() troca os acentos por ASCII. Exemplo: é vira é.

Você pode usar a htmlentites e remover as tags usando preg_replace() ou htmlspecialchars() (será que funciona com isso? Nunca testei).

Compartilhar este post


Link para o post
Compartilhar em outros sites
Você pode usar a htmlentites e remover as tags usando preg_replace() ou htmlspecialchars() (será que funciona com isso? Nunca testei).

Funciona, mas ele quer substituir por caracteres comuns, e não remover os acentos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.