Jump to content


Photo

[resolvido] Função Gerando Url Amigável


  • Faça o login para participar
11 replies to this topic

#1 janick

janick

    12 Horas

  • Usuários
  • 194 posts
  • Sexo:Não informado

Posted 24/08/2007, 12:02

Olá

peguei esta função para gerar urls amigáveis,
mas está da isso - ex - água = aagua, có = cao, dó = dao,

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

não está funcionando com maiuscula também.
Se alguém puder ajudar, obrigado !

Edição feita por: janick, 24/08/2007, 14:30.


#2 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 24/08/2007, 12:34

fiz uns testes aqui e cheguei a conclusão que você tem que mudar suas expressões regulares.

Ontem mesmo tava falando sobre regionalização de caracteres com o Paulo Ricardo num outro tópico.

A codificação de caracteres dos seus acentos está diferente da codificação do html_entity_decode().

O certo mesmo será trocar tudo seus acentos por entidades ASCII.

Ex:
á => \xE
à => \xE0

Dae assim vai ;b

Você acha essa lista na net, caso não ache, poste aqui que eu te passo ela ^_^

Espero que solucione o problema ;D

(y)

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#3 janick

janick

    12 Horas

  • Usuários
  • 194 posts
  • Sexo:Não informado

Posted 24/08/2007, 13:38

Valeu pelo esclarecimento,

Será que tem algo a ver pelo fato de estar usando em utf-8 ?

PS - nada a ver com o assunto mas achei incrível, abri o tópico a menos de 2 horas e já está no resultado do Google ! holly!

Edição feita por: janick, 24/08/2007, 14:04.


#4 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 24/08/2007, 14:03

Valeu pelo esclarecimento,

Será que tem algo a ver pelo fato de estar usando em utf-8 ?



Eu tentei trocar os encodes do html_entitiy_decode e não deu em nada ;x

somente quando utilizei entidades ASCII na ER que funcionou

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#5 janick

janick

    12 Horas

  • Usuários
  • 194 posts
  • Sexo:Não informado

Posted 24/08/2007, 14:15

olha só, achei este link - http://www.artifice....tut_html28.html

só que eu não entendi bem como devo aplicar a codificação dentro da função que mostrei antes, e outra, terei que fazer pra cada letra ?

:blink:

Editando
----------------

Achei esta aparente solução no site do Drupal - http://drupal.org/node/63924

function geraUrlLimpa($texto){

	$url = $texto;
	$url = preg_replace('~[^\\pL0-9_]+~u', '-', $url);
	$url = trim($url, "-");
	$url = iconv("utf-8", "us-ascii//TRANSLIT", $url);
	$url = strtolower($url);
	$url = preg_replace('~[^-a-z0-9_]+~', '', $url);
	return $url;

}

Funcionou !

Edição feita por: janick, 24/08/2007, 14:31.


#6 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 24/08/2007, 19:31

Ontem mesmo tava falando sobre regionalização de caracteres com o Paulo Ricardo num outro tópico.

A codificação de caracteres dos seus acentos está diferente da codificação do html_entity_decode().

O certo mesmo será trocar tudo seus acentos por entidades ASCII.

Ex:

á => \xE
à => \xE0

Não concordo. :D

Trocar os caracteres acentuados por seus convalentes ASCII em hexadecimal é uma tática de boa programação que corrige muitos problemas de LN10, mas creio que não seja o caso. Para mim o problema é este aqui: http://forum.wmonlin...&...st&p=692177. Isto é, strtolower() não está convertendo os caracteres acentuados em maiúsculo para minúsculo. Tenho certeza. :notme:

A propósito, a função até que funciona, mas é bem POGuenta. :P

Dei um UP nela pra tu, de brinde:

<?php

function cleanURI($input)
{
	return ereg_replace(
		'[^a-z0-9-]',
		'',
		ereg_replace(
			' +',
			'-',
			strtr(
				strtolower(html_entity_decode($input)),
				'àáãâéêíóõôúüçñ',
				'aaaaeeiooouucn'
			)
		)
	);
}

?>
[]’s :DAté mais

#7 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 29/08/2007, 09:36

Eu to enferrujadão em PHP, mas modificando o locale não deixa as funções preg de acordo com o nosso idioma ? Não seria mais simples do que utilizar essas funções ?!
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...

#8 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 29/08/2007, 10:37

Eu to enferrujadão em PHP, mas modificando o locale não deixa as funções preg de acordo com o nosso idioma ? Não seria mais simples do que utilizar essas funções ?!


Soy mais a favor de utilizar entidades ASCII e deixar o locale em inglês ... assim evita qualquer problema (:

Sei que mudando o locale ajuda, mas ali o que quebra um pouco as pernas é o html_entity_decode(), tentei várias codificações sem entidades ASCII e não funfo ;~ (só não tentei alterando o locale).

Mas ai vai de cada programador ;)

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#9 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 29/08/2007, 12:49

Mas o locale em inglês você vai ter que modificar na mão datas também. Acho mais viável trocar para portugues.
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...

#10 gmps

gmps

    Amsdã

  • Usuários
  • 969 posts
  • Sexo:Não informado

Posted 12/04/2008, 13:35

opa..topico antigo mas mto interessante..utilizei essa funcao postada por Paulo Ricardo, mas nao esta 100%, em um titulo: Ó Paí, Ó , o resultado sai: /-pai-/

** editei a funcao colocando algumas letras em maiusculo

strtr(
				strtolower(html_entity_decode($texto)),
				'ÀÁàáãâÉÈéêíóÓÒõôÚÙúüçñ',
				'aaaaaaeeeeiooooouuuucn'
			)


=/

Edição feita por: gmps, 12/04/2008, 13:39.

"Se você não puder ajudar, atrapalhe; afinal, o importante é participar..."

#11 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 12/04/2008, 17:47

opa..topico antigo mas mto interessante..utilizei essa funcao postada por Paulo Ricardo, mas nao esta 100%, em um titulo: Ó Paí, Ó , o resultado sai: /-pai-/

** editei a funcao colocando algumas letras em maiusculo

A modificação que tu fez não modifica nada, pois só serão passados caracteres em minúsculos. O que acontece é que tua função strtolower() não deve estar respeitando a localidade. Para isto, use setlocale() (dê uma procurada aqui no fórum sobre ela para saber como utilizá-la). ;)

[]’s :DAté mais

#12 LarPhozyHah

LarPhozyHah

    Super Veterano

  • Usuários
  • 14515 posts
  • Sexo:Masculino
  • Localidade:San Miguel de Tucuman

Posted 20/10/2017, 17:05

Levitra Meno Effetti Collaterali Cialis Eyaculacion Precoz generic levitra online pharmacy Silagra 100 Uk For Sale Tigerfil 100 Mg




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq