【问题标题】:Escaped quotes in received HTML form values收到的 HTML 表单值中的转义引号
【发布时间】:2014-03-05 08:21:42
【问题描述】:

请看下面的SSCCE。这是一个简单的 HTML 表单,带有一个文本字段和一个文本区域,两者都包含一个带有引号和标签的字符串。

提交表单时,接收到的值会被编码(使用htmlentities)、解码(使用html_entity_decode),然后与原始值进行比较(参见SSCCE 中evaluate 方法的调用)。

在我的 local 服务器上,这些值是相等的。但在 remote 服务器上,它们不是,而是所有引号都被转义,即接收到 \'\"

这是为什么?是PHP版本问题吗? (本地:5.4.9,远程:5.3.18)

此外,尽管我在 HTML 头中指定了 UTF-8,但远程服务器无法处理元音变音(如 ä、ö、ü)。为什么?

这里是 SSCCE:

<?php // sscce.php

    function encode($string)
    {
        return htmlentities($string, ENT_QUOTES);
    }

    function decode($string)
    {
        return html_entity_decode($string, ENT_QUOTES);
    }

    function evaluate($string1, $string2)
    {
        echo (strcmp($string1, $string2) == 0) ? 'OK' : 'FAIL: ' . $string2;
    }

    $value = <<<'EOT'
<p>'a' & "b"</p>
EOT;

    $encodedValue = encode($value);

    $encodedReceivedValueTF = encode(isset($_GET['submit']) ? $_GET['tf'] : '');
    $encodedReceivedValueTA = encode(isset($_GET['submit']) ? $_GET['ta'] : '');

    $decodedReceivedValueTF = decode($encodedReceivedValueTF);
    $decodedReceivedValueTA = decode($encodedReceivedValueTA);

    echo '<?xml version="1.0" encoding="UTF-8" ?>', PHP_EOL;
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>SSCCE</title>
    </head>

    <body>
        <h2>PHP: <?php echo phpversion(); ?></h2>
        <h2>Test Values</h2>
        <form action="sscce.php" method="get">
            <div><input id="tf" name="tf" type="text" size="50" value="<?php echo $encodedValue; ?>" /></div>
            <div><textarea id="ta" name="ta" rows="1" cols="50"><?php echo $encodedValue; ?></textarea></div>
            <div><input id="submit" name="submit" type="submit" value="Perform Test!" /></div>
            <div><a href="sscce.php">Reset</a></div>
        </form>

        <h2>Encoded Values</h2>
        <div>Text Field: <?php echo evaluate($encodedValue, $encodedReceivedValueTF); ?></div>
        <div>Text Area: <?php echo evaluate($encodedValue, $encodedReceivedValueTA); ?></div>

        <h2>Decoded Received Values</h2>
        <div>Text Field: <?php echo evaluate($value, $decodedReceivedValueTF); ?></div>
        <div>Text Area: <?php echo evaluate($value, $decodedReceivedValueTA); ?></div>
    </body>
</html>

【问题讨论】:

    标签: php html input encoding escaping


    【解决方案1】:

    【讨论】:

      猜你喜欢
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      相关资源
      最近更新 更多