PHP é à quinta-feira – Converter Textos em SEF
Boas. Ao nível de direitos sobre o código, devo remeter-vos para o meu primeiro artigo desta rubrica.
Para esta semana apresento-vos uma função, ou melhor, um conjunto de funções que são usadas pela principal, cujo objectivo é converter uma string “normal” (normalmente um título de artigo ou semelhante) numa string SEF (Search-Engine Friendly), ou seja, algo que seja facilmente interpretado pelos motores de busca (e pelos browsers) sem problemas, para finalmente poder ser usado na construção de um URL.
<?php function getSEFName($string) { $string = trim($string); $string = str_replace("_"," ",$string); while (strpos($string," ")) { $string = str_replace(" "," ",$string); } $string = str_replace(" ","-",$string); $string = low($string); $string = special_convert($string); $string = low($string); $string = preg_replace('/[^a-z0-9-]/s','',$string); return $string; } function special_convert($var){ $chars = array( "À" => "A", "à" => "a", "Â" => "A", "â" => "a", "Ä" => "A", "ä" => "a", "Á" => "A", "á" => "a", "Ã" => "A", "ã" => "a", "Å" => "A", "å" => "a", "Æ" => "AE", "æ" => "ae", "ß" => "B", "Ç" => "C", "ç" => "c", "È" => "E", "è" => "e", "Ê" => "E", "ê" => "e", "É" => "E", "é" => "e", "Ë" => "E", "ë" => "e", "?" => "E", "?" => "e", "Ì" => "I", "ì" => "i", "Î" => "I", "î" => "i", "Í" => "I", "í" => "i", "Ï" => "I", "ï" => "i", "Ð" => "D", "ð" => "d", "Ñ" => "N", "ñ" => "n", "Ò" => "O", "ò" => "o", "Ô" => "O", "ô" => "o", "Ö" => "O", "ö" => "o", "Ó" => "O", "ó" => "o", "Õ" => "O", "õ" => "o", "Ø" => "O", "ø" => "o", "Ú" => "U", "ú" => "u", "Ü" => "U", "ü" => "u", "Ù" => "U", "ù" => "u", "Û" => "U", "û" => "u", "Ý" => "Y", "ý" => "y", "?" => "Y", "ÿ" => "y" ); return str_replace(array_keys($chars),$chars,$var); } function low($str) { return mb_strtolower($str,"UTF-8"); } ?>
Modo de utilização:
É bastante simples e intuitivo, segue um exemplo de como transformar o título, por exemplo, “Windows 7 – Instalação Fácil” em “windows-7-instalacao-facil”
<?php $titulo = “Windows 7 – Instalação Fácil”; echo getSEFName($titulo); ?>
Qualquer dúvida ou sugestão, estão completamente à vontade.
Este artigo tem mais de um ano
Eh eh, ia já refilar que o url gerado podia ter caracteres especiais como o ! e o ?, mas parece que a expressão regular está lá para impedir isso 😉
Bom trabalho, mais uma dica interessante.
Obrigado 🙂
Existe alguma redundância com o low(), etc. mas para garantir que o resultado final é sempre o que se deseja.
Boas. Ia precisamente referir isso. No entanto é uma boa função, dá bastante jeito 🙂
Então… e para textos escritos em grego ou romeno, ou mesmo japonês?
Terás de alterar a expressão regular dos caracteres permitidos, e/ou adicionar as “conversões” na função special_convert()
Sim, mas isso não será bom para o servidor, pois não? =/
(Obrigado pela resposta)
Não vai influenciar… a não ser que eu não tenha percebido a tua pergunta, mas queres saber como “converter”, por exemplo, “メール” em “gmail”, certo?
Pois.. na verdade, a minha pergunta nem foi muito no devido contexto 😛
Mas sim, o facto de eu criar uma array ENORME, de todos os caracteres usados para alfabeto, será que isso irá meter o script muito lento??
Mas o meu interesse é mais no facto de eu querer filtrar TODOS os caracteres que não sejam usados para nomes, ou seja, apenas as letras dos alfabetos de todas as línguas.
E desculpe pela demora 😉
Peço desculpa Nuno…
O facto de criar o Array enorme não é preocupante, o que ocupa em memória é muito pouco, não notará quebras de performance.
Respondi à pergunta?
Respondeu sim, e aliviou-me, porque eu estava a ficar “assustado” da minha array na language-file já estar a ficar bastante grande 😛
Obrigado! 🙂
Gostei, mas podiam aproveitar e explicar como converter os links para SEF usando o htaccess
Obrigado pela dica, mas já que não seria directamente relacionado com a rubrica (sobre PHP), poderias escrever um artigo sobre isso e enviar para o Pplware, não? 🙂