Ir para conteúdo

POWERED BY:

Arquivado

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

marcelo2605

[Resolvido] gerar url sem acentos

Recommended Posts

Pessoal, estou usando essa função para gerar uma url sem acentos a partir do título:

 

function generateSlug($title)
{
   // Trim, utf8_decode
   $title = trim(($title));

   // Remove stress
   $title = strtr(utf8_decode($title), utf8_decode('àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ'),
                                      'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
   // Switch to lowercase
   $title = strtolower($title);
   // Remove spaces
   $title = preg_replace('`\s`', '-', $title);
   // Remove other characters
   // challet : I modified the replacement to follow former rules used to generate slugs in SFR JT
   // it was [^0-9a-z-_] , replacing by ''
   $title = preg_replace('`[^0-9a-z-]`', '-', $title);
   // Remove double
   $title = preg_replace('`(-)+`', '-', $title);
   return $title;
}

 

O problema é que ela não está substituindo as letras acentuadas por letras não acentuadas. Por exemplo: "Teste de título" fica "teste-de-t-tulo".

Compartilhar este post


Link para o post
Compartilhar em outros sites

:seta: https://gist.github.com/3295678

 

<?php
$title = 'Um título qualquer';
$slug = slug($title);

echo $slug; //um-titulo-qualquer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummm, o problema é o charset da página. É possível alterar o código para ele funcionar com charset iso-8859-1?

 

Use o código que lhe passei, que não terá que se preocupar com isso. A conversão é automática.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal João, funcionou em partes.

 

Na linha 48 tem dois "return". É isso mesmo ou só um?

 

A função retornou o título sem acentuação, mas não uniu as palavras com "-"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal João, funcionou em partes.

 

Na linha 48 tem dois "return". É isso mesmo ou só um?

 

Apenas 1, aquilo foi erro de digitação.

 

A função retornou o título sem acentuação, mas não uniu as palavras com "-"

 

Com certeza, você fez alguma coisa errada ai.

 

<?php
/**
* Check if a given string is utf8
* @param string $string
* @return boolean
*/
function is_utf8( $string ){
return preg_match('%^(?:
                 	[\x09\x0A\x0D\x20-\x7E] |
                 	[\xC2-\xDF][\x80-\xBF] |
                 	\xE0[\xA0-\xBF][\x80-\xBF] |
                 	[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} |
                 	\xED[\x80-\x9F][\x80-\xBF] |
                 	\xF0[\x90-\xBF][\x80-\xBF]{2} |
                 	[\xF1-\xF3][\x80-\xBF]{3} |
                 	\xF4[\x80-\x8F][\x80-\xBF]{2})*$%xs',
                 	$string);
}

/**
* Remove diacritics (accents) from a string.
* @param string $string
* @return string
*/
function remove_diacritics($string) {
return preg_replace(array('/\xc3[\x80-\x85]/', //upper case
                         	'/\xc3\x87/',
                         	'/\xc3[\x88-\x8b]/',
                         	'/\xc3[\x8c-\x8f]/',
                         	'/\xc3([\x92-\x96]|\x98)/',
                         	'/\xc3[\x99-\x9c]/',
                         	'/\xc3[\xa0-\xa5]/', //lower case
                         	'/\xc3\xa7/',
                         	'/\xc3[\xa8-\xab]/',
                         	'/\xc3[\xac-\xaf]/',
                         	'/\xc3([\xb2-\xb6]|\xb8)/',
                         	'/\xc3[\xb9-\xbc]/'),
                   	str_split('ACEIOUaceiou', 1),
                   	is_utf8( $string ) ? $string : utf8_encode($string));
}

/**
* Creates a "slug" from a string
* @param string $string
* @return string
*/
function slug($string) {
return preg_replace(array('/[^a-z0-9]/', '/-{2,}/'), '-', strtolower(remove_diacritics($string)));
}

 

<?php
echo slug('João Batista Neto'); //joao-batista-neto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só um toque, essa função, não funciona para aspas, duplas e/ou simles, pontos e/ou vírgulas, mas para o resto, é perfeita! smile.gif

 

Hein?

 

<?php
echo slug('João Batista",()%$#@!Neto'); //joao-batista-neto

 

Ela funciona exatamente como deveria funcionar.

 

¬¬

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hein?

 

<?php
echo slug('João Batista",()%$#@!Neto'); //joao-batista-neto

 

Ela funciona exatamente como deveria funcionar.

 

¬¬

 

Bom, eu utilizei ela no meu projeto e ela não se comportou corretamente com pontos, virgulas e aspas. O correto seria você deixar este tópico tipo em destaque e por na área de scripts, assim sempre iremos encontrar! :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, eu utilizei ela no meu projeto e ela não se comportou corretamente com pontos, virgulas e aspas.

 

Cleiton, nesse caso, é importante que você enumere os problemas que teve. Se eu souber quais são os problemas, conseguirei resolvê-los e atualizar o code.

 

: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.