Ir para conteúdo

POWERED BY:

Arquivado

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

MalCriada

[Resolvido] Erro na Consulta SQL no Firefox - caracteres especia

Recommended Posts

Boa noite pessoal,

 

Estou com um problema.

Tenho um sistema, na página inicial o visitante seleciona a cidade e os bairros são carregados de acordo com a cidade escolhida, porém no firefox não está funcionando.

O problema é que no Firefox quando se seleciona uma cidade com caracteres especiais os bairros desta cidade não são carregados.

Será que alguém pode me ajudar?

 

Ajax que carrega os Bairros:

<script language="javascript">
function pesquisar_dados(cidade)
{
 ajax.open("GET", "city.php?cidade=" + cidade, true);
 ajax.onreadystatechange = handleHttpResponse;
 ajax.send(null);
}
function handleHttpResponse()
{
 campo_select = document.forms[0].bairro;
 if (ajax.readyState == 4) {
   campo_select.options.length = 0;
   results = ajax.responseText.split(",");
   for( i = 0; i < results.length; i++ )
   {
     string = results[i].split( "|" );
  if ( string[0] != "" ){
     campo_select.options[i] = new Option( string[0], string[0] );
  } else {
  campo_select.options[i] = new Option( "Todos os Bairros" , "" );
  }
   }
 }
}
function getHTTPObject()
{
   if(window.XMLHttpRequest)
   {
       return new XMLHttpRequest();
   } else
   if(window.ActiveXObject)
   {
       var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"]; 
       for(var i = 0; i < prefixes.length; i++)
       {
            try
           {
            return new ActiveXObject(prefixes[i] + ".XMLHTTP");
           } catch (e) {}
       }
   }
}
var ajax = getHTTPObject();
</script>

 

conteúdo da página city.php

<? include("admin/conecta.php");
function limparString($str, $enc = "UTF-8"){

$acentos = array(
'A' => '/À|Á|Â|Ã|Ä|Å/',
'a' => '/à|á|â|ã|ä|å/',
'C' => '/Ç/',
'c' => '/ç/',
'E' => '/È|É|Ê|Ë/',
'e' => '/è|é|ê|ë/',
'I' => '/Ì|Í|Î|Ï/',
'i' => '/ì|í|î|ï/',
'N' => '/Ñ/',
'n' => '/ñ/',
'O' => '/Ò|Ó|Ô|Õ|Ö/',
'o' => '/ò|ó|ô|õ|ö/',
'U' => '/Ù|Ú|Û|Ü/',
'u' => '/ù|ú|û|ü/',
'Y' => '/Ý/',
'y' => '/ý|ÿ/',
'a.' => '/ª/',
'o.' => '/º/');

  return preg_replace($acentos,
  array_keys($acentos),
  htmlentities($str,ENT_NOQUOTES, $enc));
}

$consulta = mysql_query("SELECT * FROM bairro WHERE cidade = '$_GET[cidade]' and bairro != '' ORDER BY bairro ASC");// selecionamos todas as subcategorias que pertencem à categoria selecionada
while( $row = mysql_fetch_assoc($consulta))
{
$bairro = utf8_encode($row['bairro']);
if($bairro != ""){
echo limparString($bairro) . "|" . limparString($bairro) . ","; 
}
}
?>

 

 

Parte do campo Select onde carrega Cidades e os Bairros na página inicial.

<tr>
     <td colspan="2"><span class="preto10">Cidade</span><br>
       <select name="cidade" size="1" class="caixa10" style="width:210px;" onFocus="this.className='onfocus'" onBlur="this.className='onblur'" onChange="pesquisar_dados( this.value )">
         <option selected value="">Todas</option>
         <?
		$consulta = mysql_query("SELECT * FROM cidade ORDER BY cidade ASC");
		while( $row = mysql_fetch_assoc($consulta)){?>
         <option value="<? echo $row['cidade'];?>"><? echo $row['cidade'];?></option>
         <? }?>
       </select>
     </td>
   </tr>
   <tr>
     <td colspan="2"><span class="preto10">Bairro</span><br>
       <select name="bairro" onFocus="this.className='onfocus'" onBlur="this.className='onblur'" class="caixa10" style="width:210px;">
         <option value="" selected>-----------------------------------</option>
       </select></td>
   </tr>

 

 

Se puderem me dar uma luz seria muito bom, pois eu já procurei no tio Google e também aqui no fórum mas não achei a solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma solução boa para seu problema seria não utilizar o nome da cidade como chave para listar os bairros.

Não sei de como você cadastra as cidades e bairros, mas se você utilizasse um código numérico para a cidade facilitaria sua vida.

 

Os problemas com caracteres são um grande problema para nós programadores, pois estão relacionados com coisas fora do nosso controle, como por exemplo sistema operacional e browser.

 

Sei que não te dei a solução, mas quem sabe isso pode ajudar um pouquinho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

O Matheus Tavares me ajudou.

Veja lá:

http://forum.imasters.com.br/topic/427247-resolvido-php-mysql-resultado-da-consulta-sem-caracteres-especiais/page__p__1686916#entry1686916

 

No meu caso, antes da consulta sql eu coloquei isso:

function retira_acentos($cidade) {
 $array1 = array(   'á', 'à', 'â', 'ã', 'ä', 'é', 'è', 'ê', 'ë', 'í', 'ì', 'î', 'ï', 'ó', 'ò', 'ô', 'õ', 'ö', 'ú', 'ù', 'û', 'ü', 'ç'
                    , 'Á', 'À', 'Â', 'Ã', 'Ä', 'É', 'È', 'Ê', 'Ë', 'Í', 'Ì', 'Î', 'Ï', 'Ó', 'Ò', 'Ô', 'Õ', 'Ö', 'Ú', 'Ù', 'Û', 'Ü', 'Ç' );
 $array2 = array(   'a', 'a', 'a', 'a', 'a', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'c'
                    , 'A', 'A', 'A', 'A', 'A', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'C' );
 return str_replace( $array1, $array2, $cidade );
}

 

você substitui $cidade pelo valor que tu tá consultando.

 

Boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugiro algo mais simples:

 

iconv

 

<?php

$string = 'àáâãäåçèéêëìíîïñòóôõöùúûüýÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ';

echo preg_replace( '/[`^~\'"]/', null, iconv( 'UTF-8', 'ASCII//TRANSLIT', $string ) );

// aaaaaaceeeeiiiinooooouuuuyAAAAAACEEEEIIIINOOOOOUUUUY

?>

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.