Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá gente boa noite. Minha dúvida é a seguinte.
eu uso o seguinte trecho para gerar o link
<a href='desc_e.php?id=$usuario->id $usuario->titulo'>
sendo que; id=$usuario->id é que chama o conteudo do banco atraves do id cadastrado.
e $usuario->titulo é para mostrar o titulo da notícia quando o url aparecer na barra de endereço.
Até ai tudo funciona perfeitamente. O problema é que quando a URL é exibida ana barra de ENDEREÇO de qualquer navegador é mostrado esse sinal %20 devido ao espaço entre as palavras e também devido aos acentos.
Vejam:
http://www.spcomunicacao.com.br/aindahojecom/desc_e.php?id=63%20Cr%E9dito%20para%20ve%EDculos%20deve%20subir%2010%%20em%202012
os sinais em negrito seriam espaços e acentos.
Observei em vário sites e blog que as urls deles não aparecem acentos e no lugar do espaço aparecem Hífens " - "
Ex: G1.globo.com
URL gerada:
http://g1.globo.com/sao-paulo/carnaval/2012/noticia/2012/02/irmas-minerato-iniciam-pintura-para-desfile-da-gavioes-da-fiel.html
Obseve que não tem acentos e no lugar dos espaços aparecem traços " - "
Então como faço a minha url ficar assim também.
Desde já agradeço a ajuda de todos.
Ou sem Expressão Regular que acaba sendo mais rápido, mesmo que um tiquinho de nada.
Porém, essa função encontrada no Manual, não dá conta dos espaços em branco. Você pode fazer uma micro-adaptação nela, incluindo, no final do array $table:
' ' => '-'
Assim os espaços viram hífens furante a "normalização".
>
<?php
$string = 'Crédito para veículos deve subir 10% em 2012';
echo preg_replace( array( '/[`^~\'"]/', '/([\s])/' ), array( null, '-' ), iconv( 'UTF-8', 'ASCII//TRANSLIT', $string ) );
Saída:
Credito-para-veiculos-deve-subir-10%-em-2012
Cara Muito obrigado pela sua ajuda. A expressão funciona, mas só consegui da maneira que colocou ai. Não consegui fazela funcionar no link. Poderia me exclarecer melhor.
Meu código.
<?php
// Seleciona todos os usuários
$conn = @mysql_connect("host", "usuario", "senha") or die ("Problemas na conexão.");
$db = @mysql_select_db("banco", $conn) or die ("Problemas na conexão");
$sql = mysql_query("SELECT * FROM coluna_esquerda_1 ORDER BY id DESC LIMIT 15");$string = '$usuario->titulo';
echo preg_replace( array( '/[`^~\'"]/', '/([\s])/' ), array( null, '-' ), iconv( 'UTF-8', 'ASCII//TRANSLIT', $string ) );
echo "<table cellpadding=5>";
echo "<tr>";
echo "<td>";
echo "<font face='calibri' size='2' color='#666666'><b>$usuario->categoria</b></font></br>";
echo "<a href='desc_e.php?id=$usuario->id $usuario->titulo'><font face='calibri' size='4' color='#ba0000'><b>$usuario->titulo</b></font></a>";
echo "</td>";
echo "</tr>";
echo "</table>";
echo "<table cellpadding=5>";
echo "<tr>";
echo "<td>";
echo "<div id='fotos'>";
echo "<div id='borde-interior2'>";
echo "<a href='desc_e.php?id=$usuario->id $usuario->titulo'>";
if($usuario->foto == NULL)
{
echo "<img src='http://spcomunicacao.com.br/aindahojecom/images/padrao.jpg' width='140' height='100' border='0' alt='img'/>";
}
else
{
echo "<img src='http://www.spcomunicacao.com.br/aindahojecom/system/fotos/".$usuario->foto."' width='140' height='100' border='0' alt='img'/>";
}
echo "</div>";
echo "</td>";
echo "<td>";
echo "<font face='calibri' color='#666666'>$usuario->subtitulo</font>";
echo "</td>";
echo "</table>";
}
?>
Tentei desta maneira mas não deu certo.
<?php
$string = preg_replace( array( '/[`^~\'"]/', '/([\s])/' ), array( null, '-' ), iconv( 'UTF-8', 'ASCII//TRANSLIT', $usuario->titulo ) );
No lugar de** echo $usuario->titulo** coloque **echo $string**>
<?php
$string = preg_replace( array( '/[`^~\'"]/', '/([\s])/' ), array( null, '-' ), iconv( 'UTF-8', 'ASCII//TRANSLIT', $usuario->titulo ) );
No lugar de** echo $usuario->titulo** coloque **echo $string**
Cara funcionou do jeito que você falou. mas veio outro problema.
Quando o texto possui estes acentos ( ` , ´ , ^, ç, ~) ele corta e não continua a mostrar a frase.
Ex: Governo investirá 4 mi em projetos de ressocialização
Por caus do acento só aparece assim.
Ex: Governo investir
Acredito que tenha que fazer com que o código anule os acentos, fiz algumas pesquisas mas não encontrei nada. você poderia me dar mais essa ajuda. Fico grato pela atenção. Muito obrigado.
Experimentou o post #3? ;)
Não sei como você está fazendo, pois aqui funciona corretamente.
>
Não sei como você está fazendo, pois aqui funciona corretamente.
Resolvido.
Encontrei uma função parecida que tem o mesmo efeito porém escrito de outra maneira.
$string = $usuario->titulo;
$string = preg_replace("[^a-zA-Z0-9_]", "", strtr($string, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ", "aaaaeeiooouucAAAAEEIOOOUUC-"));
Fiz desta forma e funcionou certinho.
Valeu pela atenção e ajuda de todos. Obrigado. Tá ai o código para quem precisar
vcs estao fazendo tempestade em copo dagua, o %20 significa um espaço na url, basta usar o urldecode()...
http://br2.php.net/manual/pt_BR/function.urldecode.php
eh nativa, e portanto menos recursos gastos com servidor, memoria, etc...como as ER's...
Saída:
Credito-para-veiculos-deve-subir-10%-em-2012