Jump to content


Photo

[Resolvido] Url EspaçO Inicio E Final


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

#1 drhouse

drhouse

    Turista

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

Posted 16/07/2010, 07:19

Olá amigos, estou com uma duvida de como tratar uma URL que gero automaticamente quando um usuario cadastra no site. Estou com problema devido à urls ser geradas com espaço ou caracteres especiais no inicio ou no fim deixada pelo usuarios veja exemplo: -minha-url-gerada-, quando gero a url automaticamente no php caso o cliente deixe espaço no inicio ou no final ele e substituído pelo hífen como em todos os espaços só que não estou conseguindo retirar os espaços do inicio e do final caso exista para a url ficar assim: minha-url-gerada, em vez de -minha-url-gerada-. Alguém tem uma idéia o que posso fazer para solucionar?
www.pontoclassificados.com

#2 Alan Martini

Alan Martini

    Normal

  • Usuários
  • 75 posts
  • Sexo:Masculino
  • Localidade:Campo Bom, RS
  • Interesses:De tudo um pouco

Posted 16/07/2010, 08:27

Bom dia Dr. House M.D. :D

Seguinte, utilize a função str_replace:

<?php
   $url = "testando a url.html";
  
   str_replace(" ", "", $url) 

   echo $url;
   //Será exibido testandoaurl.html

?>

Fanzendo isto todos os caracteres conhecidos como " " (espaço) serão substituídos por "" (não espaço).

Acho que era isso, qualquer coisa posta ai.
Abraço
Este post lhe ajudou/foi útil? Retribua(+)
"O impossível é apenas questão de opinião" J.W.
--------------------------
Att.
Alan Martini

#3 edero

edero

    Turista

  • Usuários
  • 53 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:PHP, DOT.NET, FLEX, SQL-SERVER, TDD, Agilidade, RAILS

Posted 16/07/2010, 11:03

Função do Tiagobelem provavel que ajude você:

/***
 * Função para remover acentos de uma string
 *
 * @autor Thiago Belem <contato@thiagobelem.net>
 */
function removeAcentos($string, $slug = false) {
	$string = strtolower($string);

	// Código ASCII das vogais
	$ascii['a'] = range(224, 230);
	$ascii['e'] = range(232, 235);
	$ascii['i'] = range(236, 239);
	$ascii['o'] = array_merge(range(242, 246), array(240, 248));
	$ascii['u'] = range(249, 252);

	// Código ASCII dos outros caracteres
	$ascii['b'] = array(223);
	$ascii['c'] = array(231);
	$ascii['d'] = array(208);
	$ascii['n'] = array(241);
	$ascii['y'] = array(253, 255);

	foreach ($ascii as $key=>$item) {
		$acentos = '';
		foreach ($item AS $codigo) $acentos .= chr($codigo);
		$troca[$key] = '/['.$acentos.']/i';
	}

	$string = preg_replace(array_values($troca), array_keys($troca), $string);

	// Slug?
	if ($slug) {
		// Troca tudo que não for letra ou número por um caractere ($slug)
		$string = preg_replace('/[^a-z0-9]/i', $slug, $string);
		// Tira os caracteres ($slug) repetidos
		$string = preg_replace('/' . $slug . '{2,}/i', $slug, $string);
		$string = trim($string, $slug);
	}

	return $string;
}


Bom dia Dr. House M.D. :D

Seguinte, utilize a função str_replace:

<?php
   $url = "testando a url.html";
  
   str_replace(" ", "", $url) 

   echo $url;
   //Será exibido testandoaurl.html

?>

Fanzendo isto todos os caracteres conhecidos como " " (espaço) serão substituídos por "" (não espaço).

Acho que era isso, qualquer coisa posta ai.
Abraço



#4 drhouse

drhouse

    Turista

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

Posted 16/07/2010, 13:16

Olá amigos fiz o teste vejá no exemplo abaixo:

<?php

   // Este e título que o usuário digitou e será transformado em URL. 
   $url = " testando a url ";
  
   str_replace(" ", "", $url);

   $urlFinal = strtolower(str_replace(" ", '-', $url));

   echo $urlFinal.".html";
   //Está exibido testandoaurl.html tudo bem ele retira todos os espaços mais teria que ser só o do inicio e do final como deixado digitado pelo usuário acima na string $url.
  // Onde o resultado que preciso seria testando-a-url.html, se não tiver a verificação de espaços no inicio e fim e deixar a url está sendo gerada assim -testando-a-url-.html
?>

Será possível este tipo de verificação? Obrigado por me responder.
www.pontoclassificados.com

#5 Alan Martini

Alan Martini

    Normal

  • Usuários
  • 75 posts
  • Sexo:Masculino
  • Localidade:Campo Bom, RS
  • Interesses:De tudo um pouco

Posted 16/07/2010, 13:48

Boa Tarde,

Certo, então o que pode ser feito é:

<?php

   $url = "testando a url.html";
  
   //vai criar um array com as palavras separadas onde tiver espaço
   $separando = explode(" ",$url);

   //vai juntar o array separando por traço ( - )
   $urlnova = implode("-",$separando);

   echo $url;
   //Será exibido testando-a-url.html

?>

;-)
Este post lhe ajudou/foi útil? Retribua(+)
"O impossível é apenas questão de opinião" J.W.
--------------------------
Att.
Alan Martini

#6 drhouse

drhouse

    Turista

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

Posted 16/07/2010, 15:08

Olá amigos olha o codigo que montei se puder dar uma olhada e opinar para ajudar a melhorar ele:

<?php
	
	// String principal de teste de titulo digitado pelo usuario onde será gerado a url.
        // Veja que o usuario digitou muitos espaços se for gerar uma url com o acima retornaria  -testando-a-url-d-a--------------.html ou seja não removeu espaços desnecessario na url e nem retirou espaços inicial ou final caso tinha para não iniciar com hifem na subistituição em espaço. 
	$url = " testando a url d a             ";
  
	//vai criar um array com as palavras separadas onde tiver espaço
	$separando = explode(" ",$url);
   		
	// Faz a contagem de explode
	$nPalavras = count($separando);

	// Incia o for da contagem de n de palavras.
	for((int) $i=0; $i <= $nPalavras; $i++){
		
		// Usei trim para remover espaços caso tenha sido no explode verifica se e vazio caso não verdadeiro.
		if(trim($separando[$i]) <> NULL){
			
			// A primeira palavra so inicia.
			if ($i == 1){
				
				// Inicia a criar a url.
				$urlfinal .= $separando[$i];
				
			}else{
				
				// Juntar separando depois da primeira por traço ( - ).
				$urlfinal .= "-".$separando[$i];
			
			}
		
		}
	
	}
	
	echo $urlfinal.".html";
	//Será exibido testando-a-url-d-a.html

?>

Obrigado desde já.
www.pontoclassificados.com

#7 Alan Martini

Alan Martini

    Normal

  • Usuários
  • 75 posts
  • Sexo:Masculino
  • Localidade:Campo Bom, RS
  • Interesses:De tudo um pouco

Posted 16/07/2010, 16:46

Ficou supimpa ;)

O que pode ser feito é uma verificação de caracteres especiais, pode ser feito no recebimento da URL.

<?php
    public static function removerAcentos($var) {
        $acentos   = array('ã','á','â','é','ê','í','õ','ó','ú','Ã','Á','Â','É','Ê','Í','Õ','Ó','Ú'); 
        $normais   = array('a','a','a','e','e','i','o','o','u','A','A','A','E','E','I','O','O','U'); 
        $var       = str_replace($acentos, $normais, $var); 
        $especiais = array('/','|','*',':','[',']','{','}',"'",'"','(', ')','<','>',','); 
        $var       = str_replace($especiais, '', $var); 
        $var       = str_replace(' ', '', $var); 
        $var       = strtolower($var); 
        return $var; 
    }
?>

Isso ai, abraço.
Este post lhe ajudou/foi útil? Retribua(+)
"O impossível é apenas questão de opinião" J.W.
--------------------------
Att.
Alan Martini

#8 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 16/07/2010, 17:08

Olá amigos olha o codigo que montei se puder dar uma olhada e opinar para ajudar a melhorar ele:

<?php
	
	// String principal de teste de titulo digitado pelo usuario onde será gerado a url.
        // Veja que o usuario digitou muitos espaços se for gerar uma url com o acima retornaria  -testando-a-url-d-a--------------.html ou seja não removeu espaços desnecessario na url e nem retirou espaços inicial ou final caso tinha para não iniciar com hifem na subistituição em espaço. 
	$url = " testando a url d a             ";
  
	//vai criar um array com as palavras separadas onde tiver espaço
	$separando = explode(" ",$url);
   		
	// Faz a contagem de explode
	$nPalavras = count($separando);

	// Incia o for da contagem de n de palavras.
	for((int) $i=0; $i <= $nPalavras; $i++){
		
		// Usei trim para remover espaços caso tenha sido no explode verifica se e vazio caso não verdadeiro.
		if(trim($separando[$i]) <> NULL){
			
			// A primeira palavra so inicia.
			if ($i == 1){
				
				// Inicia a criar a url.
				$urlfinal .= $separando[$i];
				
			}else{
				
				// Juntar separando depois da primeira por traço ( - ).
				$urlfinal .= "-".$separando[$i];
			
			}
		
		}
	
	}
	
	echo $urlfinal.".html";
	//Será exibido testando-a-url-d-a.html

?>

Obrigado desde já.

Com expressão regular saia mais fácil isso aí.

$urlFinal = preg_replace("\s+", "-", trim($url));

Com o trim você já mata os espaços no começo e no final. Depois com a expressão regular trocar qualquer seqüência de espaços por um hífen. Usar também uma função como essa removerAcentos é bom.

$urlFinal = removerAcentos(preg_replace("\s+", "-", trim($url)));


#9 drhouse

drhouse

    Turista

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

Posted 16/07/2010, 17:24

Olá LeoB, utilizei está expressão passada está dando o seguinte erro, "Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in" não deu pra testar devido ao erro.
www.pontoclassificados.com

#10 LeoB

LeoB

    Super Veterano

  • Usuários
  • 1876 posts
  • Sexo:Masculino
  • Interesses:Programação

Posted 16/07/2010, 17:28

Esqueci das barras.

$urlFinal = preg_replace("/\s+/", "-", trim($url));

#11 drhouse

drhouse

    Turista

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

Posted 16/07/2010, 17:37

Deu certinho ficou bem simples :D Obrigado a todos.
www.pontoclassificados.com




0 user(s) are reading this topic

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

IPB Skin By Virteq