Pedro Schneider

Um pouco sobre minha vida, trabalhos, estudos, diversões entre outros!

Programando Url Amigáveis no PHP

Hoje estava testando o gerenciador, e percebi que o PHP tem problemas ao tratar alguns caracteres especias como os do MS Office.

Essa é a função que estava utilizando:

function cleanUrl( $url, $colecaoEscapar = NULL ) {
	$aa = array( 'À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','&','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ý','ý','þ','ÿ',' ','/','*','#','@','!','$','~','`',"'",'"','?','\\','{','}','[',']',':',';','.','','+','=','_','^','|','%','(',')',',' );
	$bb = array( 'a','a','a','a','a','a','a','c','e','e','e','e','e','i','i','i','i','d','n','o','o','o','o','o','o','u','u','u','u','y','b','s','a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n','o','o','o','o','o','o','u','u','u','y','y','b','y','-','-','','','','','','','','','','','-','','','','','','','','','','','','','','','','','','' );
 
	if ( !is_null( $colecaoEscapar ) )
 
		foreach( $colecaoEscapar as $escapar ) {
 
			$posicao = array_search( $escapar, $aa );
 
			unset( $aa[ $posicao ], $bb[ $posicao ] );
 
		}
 
	return strtolower( str_replace( $aa, $bb, str_replace( '--', '-', str_replace( ' ', '-', trim( $url ) ) ) ) );
 
}

Porém, está tendo problemas que o PHP não estava fazendo o str_replace nos espaços. Então depois de muita pesquisa, fui no banco de dados onde tava salvo o registro e copiei o espaço que não era substituído.

Minha função resultou nessa: (note a ultima posição do primeiro array)

function cleanUrl( $url, $colecaoEscapar = NULL ) {
 
		$aa = array( 'À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','&','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','ø','ù','ú','û','ý','ý','þ','ÿ',' ','/','*','#','@','!','$','~','`',"'",'"','?','\\','{','}','[',']',':',';','.','<','>','+','=','_','^','|','%','(',')',',', ' ' ); //este ultimo não é qualquer espaço, é um espaço do MS Office que o PHP não consegue dar replace
 
		$bb = array( 'a','a','a','a','a','a','a','c','e','e','e','e','e','i','i','i','i','d','n','o','o','o','o','o','o','u','u','u','u','y','b','s','a','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','d','n','o','o','o','o','o','o','u','u','u','y','y','b','y','-','-','','','','','','','','','','','-','','','','','','','','','','','','','','','','','','','' );
 
 
 
		if ( !is_null( $colecaoEscapar ) )
 
			foreach( $colecaoEscapar as $escapar ) {
 
				$posicao = array_search( $escapar, $aa );
 
				unset( $aa[ $posicao ], $bb[ $posicao ] );
 
			}
 
 
 
		return strtolower( str_replace( $aa, $bb, str_replace( '--', '-', str_replace( ' ', '-', trim( $url ) ) ) ) );
 
	}
posted by correaschneider in Desenv,Dicas,PHP and have No Comments