Ir para conteúdo

Arquivado

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

Denis Lins

[Resolvido] Problema em função de retirar caracteres especiais

Recommended Posts

Galera, preciso de um help aqui.

 

A função funciona em uma página separada, teste.php, mas na hora que jogo ela no site não funciona. Estou tratando dados de formulário com ela.

 

function getCleanURL($url)
		{
			$url = html_entity_decode($url);
			$url = strtolower($url);
			$url = preg_replace('/[áàãâä]/', 'a', $url);
			$url = preg_replace('/[éèêë]/', 'e', $url);
			$url = preg_replace('/[íìîï]/', 'i', $url);
			$url = preg_replace('/[óòõôö]/', 'o', $url);
			$url = preg_replace('/[úùûü]/', 'u', $url);
			$url = preg_replace('/[ç]/', 'c', $url);
			$url = preg_replace('/[ñ]/', 'n', $url);
			$url = preg_replace('/[[:space:]]/', '-', $url);
			$url = preg_replace('/[^a-z0-9\-]/', '' ,$url);
			$url = preg_replace('/(-){2,}/', '-', $url);
			return $url;
		}

Não funciona ... se eu jogo 'áááá', ela retorna string(0) "". se eu comentar a linha

 

$url = preg_replace('/[^a-z0-9\-]/', '' ,$url);

A função retorna a string sem alterar nada, string(4) "áááá".

 

Ajuda ai galera :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho este problema direto com um script quase idêntico a este que fiz.

 

O problema é coisa de utf-8, unicode e essas paradas de encodagem, daí tenho que fazer vários testes pra ver qual versão da função vou usar no site hehehe.

 

Outra versão:

 

function noSpecials($texto){
	/* função que gera uma texto limpo pra virar URL:
	- limpa acentos e transforma em letra normal
	- limpa cedilha e transforma em c normal, o mesmo com o ñ
	- transforma espaços em hifen (-)
	- tira caracteres invalidos
	by Micox - elmicox.blogspot.com - www.ievolutionweb.com
	*/
	//desconvertendo do padrão entitie (tipo á para á)
	$texto = trim(html_entity_decode($texto));
	//tirando os acentos
	$texto= preg_replace('![áàãâä]+!u','a',$texto);
	$texto= preg_replace('![éèêë]+!u','e',$texto);
	$texto= preg_replace('![íìîï]+!u','i',$texto);
	$texto= preg_replace('![óòõôö]+!u','o',$texto);
	$texto= preg_replace('![úùûü]+!u','u',$texto);
	//parte que tira o cedilha e o ñ
	$texto= preg_replace('![ç]+!u','c',$texto);
	$texto= preg_replace('![ñ]+!u','n',$texto);
	//tirando outros caracteres invalidos
	$texto= preg_replace('[^a-z0-9\-]','-',$texto);
	//tirando espaços
	$texto = str_replace(' ','-',$texto);
	//trocando duplo espaço (hifen) por 1 hifen só
	$texto = str_replace('--','-',$texto);

	return strtolower($texto);
}

Veja que tem uns lance de !u no preg_replace

 

Vê se essa dá certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uso esta

 

////////////// FUNÇÃO PARA RETIRAR ACENTOS////////////////////////////
           $arquivo_nome = utf8_decode($arquivo_nome);
           function removeacento($arquivo_nome)
           {
           $from = 'ÀÁÃÂÉÊÍÓÕÔÚÜÇàáãâéêíóõôúüç ';
           $to   = 'aaaaeeiooouucaaaaeeiooouuc-';
           return strtr($arquivo_nome, $from, $to);
           }
           $arquivo_nome = removeacento($arquivo_nome);
           /////////////////////////////////////////// 

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu micox, ja vou testar aqui e ja volto a postar.

 

Enquanto isso, me explica o porque desses '!u'?

 

Eu só conheço i (case insensitive) e g (global).

 

Não conhecia esse u, muuuito menos esse '!'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso parece que é coisa pra fazer o regexp trabalhar com unicode. Eu também não sei muito não e nem tive tempo de pesquisar o que seria huaeh uaehuae

Compartilhar este post


Link para o post
Compartilhar em outros sites

uahsuhsaus

 

valeu, vou dar uma pesquisada aqui.

 

Só um complemento pra sua função: (não repara eu ter mudado algumas coisas, é só pra ficar do jeito que eu gosto :D)

 

$url = trim($url);
			$url = strtolower($url);
			$url = html_entity_decode($url);
			$url = preg_replace('![áàãâä]+!u', 'a', $url);
			$url = preg_replace('![éèêë]+!u',  'e', $url);
			$url = preg_replace('![íìîï]+!u',  'i', $url);
			$url = preg_replace('![óòõôö]+!u', 'o', $url);
			$url = preg_replace('![úùûü]+!u',  'u', $url);
			$url = preg_replace('![ç]+!u',     'c', $url);
			$url = preg_replace('![ñ]+!u',     'n', $url);
			$url = preg_replace('/[[:space:]]/', '-', $url);
			$url = preg_replace('/[^a-z0-9\-]/', '',  $url);
			$url = preg_replace('/(-){2,}/',     '-', $url);
			return $url;

E cara, não funcionou pra mim :S

 

Continou retornando string(0) ""...

 

Ajuda ai galeraa, preciso disso pra hoje ainda :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

uso esta função p/ fazer isso:

function tirarAcento($frase){
  $frase = ereg_replace("[^a-zA-Z0-9_.]", "", 
    strtr($frase, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ", 
    "aaaaeeiooouucAAAAEEIOOOUUC-"));
  $frase = strtolower($frase); //Transforma em minúscula, se não quiser é só tirar
  return $frase;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

problema com charset ne!?

 

dá uma olhada alguns tópicos abaixo do seu:

http://forum.imasters.com.br/index.php?/topic/400146-tratamento-em-string/page__view__findpost__p__1566584

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu uso assim:

 

function tirarAcento($frase){

$search =  explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u,ã,Ã,Ç,Á,É,Í,Ó,Ú,À,È,Ì,Ò,Ù,Ä,Ë,Ï,Ö,Ü,Ÿ,Â,Ê,Î,Ô,Û,Å,E,I,Ø,U");
$replace = explode(",","c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u,a,A,C,A,E,I,O,U,A,E,I,O,U,A,E,I,O,U,Y,A,E,I,O,U,A,E,I,O,U,A");

$frase = str_replace($search, $replace, $frase);

return $frase;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tava procurando isso também, até implantei os modelos daqui, mas não funcionou, não manjo muito de java, e preciso muito disso. Se alguém pode me ajudar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Amigos(a),

 

uso essa função para conversão e nunca houve problema em minha aplicação

<?php

function setUri($string){
		$a = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜüÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ"!@#$%&*()_-+={[}]/?;:.,\\\'<>°ºª';
		$b = 'aaaaaaaceeeeiiiidnoooooouuuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr                                 ';	
		$string = utf8_decode($string);
		$string = strtr($string, utf8_decode($a), $b);
		$string = strip_tags(trim($string));
		$string = str_replace(" ","-",$string);
		$string = str_replace(array("-----","----","---","--"),"-",$string);
		return strtolower(utf8_encode($string));
	}

?>

Se solucionou seu problema, peço que me der um ponto de reputação e marque com resolvido. =D

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.