【问题标题】:Prevent Double Quotes from being stripped防止双引号被剥离
【发布时间】:2013-03-28 05:31:41
【问题描述】:

用英尺和英寸显示一个人的身高作为字符串并防止 sql 注入以及确保正确的输入格式的最佳方法是什么?理想情况下,我想将其显示为 5'11" 作为示例。

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

这样做的问题是,虽然在 MySQL 中它存储为 5'11",但当它在页面上输出时,它显示为 5'11,末尾没有双引号。

有没有更好的方法来做到这一点?我也在考虑尝试将高度分成两个单独的文本字段输入,一个用于英尺,一个用于英寸。然后将两者结合起来显示为一个。

建议?

【问题讨论】:

  • 显示在页面上显示它的代码。它可能需要使用htmlentities()

标签: php


【解决方案1】:

要显示您需要转义的引号:

echo "5\' 11\"";

将输出:

5' 11"

您可以在插入数据库之前使用addslashes 转义所有字符(需要转义的)。然后,为了增加安全性,您应该查看prepared statements

【讨论】:

    【解决方案2】:

    您可以通过一点创意过滤内容,以使其保持一致。在此示例中,我将使用 htmlentities 转换所有内容,但没有必要以这种方式将它们存储在数据库中。您需要确保在数据库注入之前对 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"
    

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 2018-06-06
      • 1970-01-01
      • 2011-02-15
      • 2016-06-06
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多