PHP
Acentos e Caracteres Especiais com PHP
Ao usar um editor de texto que permita acentuação para criar uma página, corremos o risco dos acentos não serem interpretados corretamente por alguns browsers, em especial, browsers instalados em países onde não se utiliza acentuação, como os Estados Unidos, por exemplo. Se quisermos garantir que a acentuação da nossa página seja universalmente entendida devemos usar as entities.
Nas entities faz diferença usar caracteres maiúsculos ou minúsculos. Na verdade, entities é o único caso onde a HTML é case-sensitive. É verdade também que é muito trabalhoso colocar as entities ao invés de usar diretamente os caracteres acentuados, mas alguns editores (como o ckeditor, por exemplo) permitem que digitemos os acentos e eles se encarregam de converter para as entities.
Se o seu Banco de Dados contém sequências em duas codificações diferentes por algum motivo, seja de importação, exportação ou algum problema que não conseguiu detectar, o que eu faria?
Em vez de ficar chutando ou remendando seu código com detecção de caracteres e com funções de codificação e decodificação, utilize um script que irá ler todos os seus registros e atualizar as strings para o formato correto (eu escolheria UTF-8, se eu fosse você). Desta forma, seu código será mais limpo e simples de manter.
function detect_encoding($string) { ////w3.org/International/questions/qa-forms-utf-8.html if (preg_match('%^(?: [\x09\x0A\x0D\x20-\x7E] | [\xC2-\xDF][\x80-\xBF] | \xE0[\xA0-\xBF][\x80-\xBF] | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} | \xED[\x80-\x9F][\x80-\xBF] | \xF0[\x90-\xBF][\x80-\xBF]{2} | [\xF1-\xF3][\x80-\xBF]{3} | \xF4[\x80-\x8F][\x80-\xBF]{2} )*$%xs', $string)) return 'UTF-8'; //If you need to distinguish between UTF-8 and ISO-8859-1 encoding, list UTF-8 first in your encoding_list. //if you list ISO-8859-1 first, mb_detect_encoding() will always return ISO-8859-1. return mb_detect_encoding($string, array('UTF-8', 'ASCII', 'ISO-8859-1', 'JIS', 'EUC-JP', 'SJIS')); } function convert_encoding($string, $to_encoding, $from_encoding = '') { if ($from_encoding == '') $from_encoding = detect_encoding($string); if ($from_encoding == $to_encoding) return $string; return mb_convert_encoding($string, $to_encoding, $from_encoding); }
O uso desta função ficaria da seguinte forma:
// se o terceiro parametro não for especificado o "from_encoding" ele será detectado automaticamente $newString = convert_encoding($oldString, 'UTF-8');
Converta cada campo (propriedade) da tabela (entidade) que desejar, usando o exemplo acima e faça UPDATE no BD. Você poderia fazer um script genérico e deixar no seu pendrive e sempre que aparecer uma pedra no caminho, recorra ao SCRIPT.
Outra forma de contornar o problema sem alterar os dados do BD.
Agora, se desejar usar sempre uma função, para que qualquer informação que venha do BD seja tratada no momento que for mostrar na tela, sugiro utilizar a função abaixo, que se o texto for escrito com acentuação normal, ou com os caracteres entities ( ex: "é", "ã" ), ele trata o texto corretamente para esses dois casos. A função é a seguinte:
function charset_decode_utf_8 ($string) { /* Only do the slow convert if there are 8-bit characters */ /* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */ if (! preg_match("[\200-\237]", $string) and ! preg_match("[\241-\377]", $string)) return $string; // decode three byte unicode characters $string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/", "'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'", $string); // decode two byte unicode characters $string = preg_replace("/([\300-\337])([\200-\277])/", "'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'", $string); return $string; }
E seu uso é bem simples:
$seuTextoTransformado = charset_decode_utf_8($textoATransformar); echo $seuTextoTransformado;
Espero ter ajudado e se tiver dúvidas, não exite em entrar em contato que tentamos te ajudar!
Gigasystems Login:
Informe seu e-mail abaixo para continuar!
XVeja Também:
Artigos Relacionados a categoria: PHP
Cotações para compra e venda de Moedas estrangeiras com PHP
27 July de 2016
Gerenciador de dependências Composer
14 January de 2016
Erro ao acessar um arquivo externo com o comando file_get_content
04 November de 2015
Baixando anexo do email no servidor com IMAP e PHP
27 August de 2015
Olá, deixe seu comentário para Acentos e Caracteres Especiais com PHP
Tulio Batista
Robson Santana
Filipe Avelino
Geraldo
Obrigado