【问题标题】:php and special charactersphp 和特殊字符
【发布时间】:2015-03-21 16:36:23
【问题描述】:

在 PHP 中,当我编写时

$string="\thello world\t"
echo trim($string);

这会输出hello world。但是,当我在 HTML 表单输入字段中输入相同的字符串并发布到服务器时,行为会发生变化。

echo trim($_POST["string"];

以上代码输出\thello world\t

有什么区别?

【问题讨论】:

    标签: php post escaping special-characters forms


    【解决方案1】:

    这是因为双引号内的\t 是一个扩展为文字制表符的escape sequence。但是,当您在输入字段中键入 \t 时,它会作为文字字符 \t 发布。

    在此示例中,此代码。

    echo trim($_POST["string"];
    

    类似于这段代码。

    $string='\thello world\t'
    echo trim($string);
    

    转义序列不会在单引号声明的字符串内展开。

    如果您需要从提交的字符串中扩展转义序列的功能,this question 提供了一些技术。

    【讨论】:

    • 那么,任何来自 GET 或 POST 的输入都是特殊字符安全的?
    • @Whiteley 不一定,即使输入不允许,用户仍然可以提交任意数据。然而,转义序列不会被扩展。如果您只担心用户可能会提交前导/尾随空格,trim 就足够了。
    • 在这种情况下,trim 只删除空格字符,而不是像 \n 或 \t 这样的特殊字符,对吗?
    • @Whiteley Space 和其他空白字符是的。 \n\t 等实际上是输入的字符,而不是转换为空格。
    • @alexander-omara 通常,我对来自 $_POST 的任何输入使用 preg_replace('/\s+/', ' ', $string) 来删除多余的空格。如果用户写了“我的名字是换行符(\n)”,我只想保留。根据你的回答,我可以继续使用这个功能,不用担心吧?
    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多