sql >> Databáze >  >> RDS >> Mysql

Vkládání textu a speciálních znaků a MySQL

Máte správnou představu o zachování textu v databázi jako nezpracovaného. Nejste si jisti, k čemu jsou všechny ty věci HTML entity; při vkládání databáze byste to neměli dělat.

[Jediný důvod, proč mě napadá, proč byste se mohli pokusit dekódovat příchozí vstup pro databázi pomocí entit, by byl, když zjistíte, že získáváte odkazy na znaky jako Š ve vstupu pro odeslání formuláře. Pokud k tomu dochází, je to proto, že uživatel zadává znaky, které v kódování používaném stránkou s formulářem neexistují. Tato forma kódování je zcela falešná, protože pak nemůžete rozlišit mezi zadáním uživatele Š a doslova napsáním Š ! Tomu byste se měli vyhnout tím, že pro všechny své stránky a obsah použijete kódování UTF-8, protože do tohoto kódování se hodí každý možný znak.]

Řetězce ve vašem skriptu by měly být vždy surový text bez escapování. To znamená, že s nimi nic neprovedete, dokud je nevyvedete do kontextu, který není prostý text. Takže pro jejich vložení do řetězce SQL:

$category= trim($_POST['category']);
mysql_query("SELECT * FROM things WHERE category='".mysql_real_escape_string($category)."'");

(nebo použijte parametrizované dotazy, abyste nemuseli ručně escapovat.) Při vkládání obsahu do HTML:

<input type="text" name="category" value="<?php echo htmlspecialchars($category); ?>" />

(můžete definovat pomocnou funkci s kratším názvem, například function h($s) { echo htmlspecialchars($s, ENT_QUOTES); } pokud chcete snížit množství psaní, které musíte dělat v šablonách.)

A... to je skoro vše. Řetězce, které vycházejí z databáze, nemusíte zpracovávat, protože se již jedná o nezpracované řetězce. Nemusíte zpracovávat vstupní řetězce (*), kromě jakéhokoli ověření pole specifického pro aplikaci, které chcete provést.

*:dobře, s výjimkou magic_quotes_gpc je zapnuto, v takovém případě musíte buď použít stripslashes() vše, co přichází z get/post/cookie, nebo, moje oblíbená možnost, prostě okamžitě selže:

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!'
    );


  1. TDS Server – Použití příkazů Transact-SQL (T-SQL) pro práci s daty Salesforce na SQL Server

  2. Změňte konfiguraci databáze CakePHP globálně

  3. Vrácení oprávnění tabulky z propojeného serveru v SQL Server (příklady T-SQL)

  4. Počítání všech příspěvků patřících do kategorie A jejích podkategorií