0

人の身長をフィートとインチを文字列として表示し、SQL インジェクションを防ぎ、適切な入力形式を確保する最良の方法は何ですか? 例として5'11"のように表示するのが理想です。

$height = $_POST['height'];
$height = stripslashes($height);

これに関する問題は、MySQL では 5'11" として保存されますが、ページに出力すると、末尾に二重引用符なしで 5'11 として表示されることです。

これを行うより良い方法はありますか?また、高さをフィート用とインチ用の 2 つの別々のテキストフィールド入力に分割しようと考えています。次に、2 つを組み合わせて 1 つとして表示します。

提案?

4

2 に答える 2

1

エスケープする必要がある引用符を表示するには、次のようにします。

echo "5\' 11\"";

出力します:

5' 11"

データベースに挿入する前に、addslashesを使用してすべての文字 (エスケープする必要がある) をエスケープできます。次に、セキュリティを強化するために、準備済みステートメントを調べる必要があります。

于 2013-03-28T05:50:58.207 に答える
0

少しの創造性でコンテンツをフィルタリングして、すべての一貫性を持たせることができます。この例では、htmlentities を使用してすべてを変換していますが、そのようにデータベースに格納する必要はありません。db インジェクションの前に、PDO に mysqli_real_escape_string() や quote() などを使用していることを確認する必要があります。

<?php
    //$height = $_POST['height'];
    $heights = array('5\' 6"','5ft 6in','5 feet 6 inches','5.5\'','5\'6"','5 1/2\'','3 foot 5 inches','2ft 8in','3 1/4in','3 1/4ft');

    $patterns = array(
    //Double Quotes
    '!&#34;!',
    '!&ldquo;!',
    '!&rdquo;!',
    '!&#8220;!',
    '!&#8221;!',
    '!&Prime;!',
    '!&#8243;!',
    '!in(ch(es)?|\.)?!',

    //Single Quotes
    '!&acute;!',
    '!&lsquo;!',
    '!&#[0]?39;!',
    '!&rsquo;!',
    '!&#8216;!',
    '!&#8217;!',
    '!&#8242;!',
    '!&prime;!',
    '!f(oo|ee)?t\.?!',

    //Conversions
    '!( 1/2|\.5)&apos;!',
    '!( 1/4|\.25)&apos;!',
    '!( 1/3|\.3(3(3)?)?)&apos;!',
    '!( 3/4|\.75)&apos;!',

    //cleanup
    '! (&)!',
    '!;([0-9])!',

    //fraction to decimal inch conversions
    '! 1/2!','! 1/4!','! 1/3!','! 3/4!',

    );

    $replacements = array(
    '&quot;','&quot;','&quot;','&quot;','&quot;','&quot;','&quot;','&quot;',
    '&apos;','&apos;','&apos;','&apos;','&apos;','&apos;','&apos;','&apos;','&apos;',
    '&apos; 6&quot;','&apos; 3&quot;','&apos; 4&quot;','&apos; 9&quot;',"$1","; $1",
    '.5','.25','.33','.75',
    );
        echo "<pre>";
    foreach($heights as $value){
        $value = htmlentities($value,ENT_QUOTES);

        echo "$value becomes ".preg_replace($patterns,$replacements,$value)."\n";
    }
        echo "</pre>";
?>

出力は次のようになります

5' 6" becomes 5' 6"
5ft 6in becomes 5' 6"
5 feet 6 inches becomes 5' 6"
5.5' becomes 5' 6"
5'6" becomes 5' 6"
5 1/2' becomes 5' 6"
3 foot 5 inches becomes 3' 5"
2ft 8in becomes 2' 8"
3 1/4in becomes 3.25"
3 1/4ft becomes 3' 3"
于 2013-03-28T06:33:29.567 に答える