quinta-feira, 11 de julho de 2013

Problema com caracter especial sql server + php

Se você estiver trabalhando com php e tiver que usar o sql serve e esse, mostra erro nos caracteres especiais eis aqui algumas soluções:


Exemplo:

Pesquisa:

Se você tiver fazendo alguma consulta pode tirar os caracteres especiais e colocar uma claúsula no sql para não ser case sensitive.


<?php

function novaString($string) {

$string = str_replace( '´', '', $string );
$string = str_replace( '`', '', $string );
$string = str_replace( '~', '', $string );
$string = str_replace( '^', '', $string );
$string = str_replace( '¨', '', $string );
$string = str_replace( 'Ç', 'C', $string);
$string = str_replace( 'ç', 'c', $string);
$string = str_replace( '[ÁÀÂÃÄ]', 'A', $string);
$string = str_replace( 'Á', 'A', $string);
$string = str_replace( 'À', 'A', $string);
$string = str_replace( 'Â', 'A', $string);
$string = str_replace( 'Ã', 'A', $string);
$string = str_replace( 'Ä', 'A', $string);

$string = str_replace( 'ã', 'a', $string);
$string = str_replace( 'á', 'a', $string);
$string = str_replace( 'à', 'a', $string);
$string = str_replace( 'â', 'a', $string);
$string = str_replace( 'ä', 'a', $string);
$string = str_replace( 'ã', 'a', $string);

$string = str_replace( '[ÉÈÊË]', 'E', $string);


$string = str_replace( 'É', 'E', $string);
$string = str_replace( 'È', 'E', $string);
$string = str_replace( 'Ê', 'E', $string);
$string = str_replace( 'Ë', 'E', $string);
$string = str_replace( '&', 'e', $string);


$string = str_replace( 'è', 'e', $string);
$string = str_replace( 'é', 'e', $string);
$string = str_replace( 'ê', 'e', $string);
$string = str_replace( 'ë', 'e', $string);


$string = str_replace( 'ì', 'i', $string);
$string = str_replace( 'í', 'i', $string);
$string = str_replace( 'î', 'i', $string);

$string = str_replace( 'ï', 'i', $string);


$string = str_replace( 'ò', 'o', $string);
$string = str_replace( 'ó', 'o', $string);
$string = str_replace( 'ô', 'o', $string);
$string = str_replace( 'õ', 'o', $string);
$string = str_replace( 'ö', 'o', $string);

$string = str_replace( 'ù', 'o', $string);
$string = str_replace( 'ú', 'o', $string);
$string = str_replace( 'û', 'o', $string);
$string = str_replace( 'ü', 'o', $string);

///para garantir irei deixar cercar todos os caracteres passiveis de erro

$string = str_replace( '#', 'e', $string);
$string = str_replace( '&', 'e', $string);
$string = str_replace( '@', '', $string);
$string = str_replace( 'ª', 'a', $string);
$string = str_replace( '*', '', $string);
$string = str_replace( '!', '', $string);

return $string;
}

$variavel =   novaString( $variavel );

SELECT * from tabela where descricao like'% $variavel %' COLLATE Latin1_General_CI_AI


?>

Esta é uma das soluções caso seja invíavel mudar o charset, mas de preferência é melhor mudar o charset para ISO-8859-1, normalmente uma das duas soluções resolve o problema.

Nenhum comentário:

Postar um comentário