Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Texto de entrada e caracteres especiais e MySQL


Você tem a ideia certa de manter o texto no banco de dados como bruto. Não tenho certeza para que serve todo o material de entidade HTML; você não precisa fazer isso para uma inserção de banco de dados.

[A única razão pela qual você pode tentar decodificar entrada de entrada de entidade para o banco de dados seria se você descobrir que está recebendo referências de caracteres como Š em sua entrada de envio de formulário. Se isso está acontecendo, é porque o usuário está inserindo caracteres que não existem na codificação usada pela página com o formulário. Esta forma de codificação é totalmente falsa porque você não pode distinguir entre o usuário digitando Š e literalmente digitando Š ! Você deve evitar isso usando a codificação UTF-8 para todas as suas páginas e conteúdo, pois todos os caracteres possíveis cabem nessa codificação.]

Strings em seu script devem sempre ser texto bruto sem escape. Isso significa que você não faz nada com eles até o momento em que os envia em um contexto que não é texto simples. Então, para colocá-los em uma string SQL:
$category= trim($_POST['category']);
mysql_query("SELECT * FROM things WHERE category='".mysql_real_escape_string($category)."'");

(ou use consultas parametrizadas para evitar ter que escapar manualmente.) Ao colocar conteúdo em HTML:
<input type="text" name="category" value="<?php echo htmlspecialchars($category); ?>" />

(você pode definir uma função auxiliar com um nome mais curto como function h($s) { echo htmlspecialchars($s, ENT_QUOTES); } se você quiser reduzir a quantidade de digitação que precisa fazer nos modelos.)

E... mais ou menos isso. Você não precisa processar strings que saem do banco de dados, pois elas já são strings brutas. Você não precisa processar strings de entrada (*), exceto qualquer validação de campo específica do aplicativo que deseja fazer.

*:bem, exceto se magic_quotes_gpc está ativado, nesse caso você precisa stripslashes() tudo o que vem de get/post/cookie, ou, minha opção favorita, falha imediatamente:
if (get_magic_quotes_gpc())
    die(
        'Magic quotes are turned on. They are utterly bogus and no-one should use them. '.
        'Turn them off, you idiot, or I refuse to run. So there!'
    );