在PHP中规范化和携带字符串的最佳方法是什么?

时间:2012-02-28 15:15:58

标签: php forms encoding

我正在收集表格上的textarea数据。在接收页面上,我需要将其存储在隐藏字段中以便POST进入第三页以进行进一步处理(通过电子邮件发送,保存到文件等)我已经意识到我的共享主机已启用魔术报价并且可以'改变 - 因此,我在需要的地方熟悉striplash()。

在填充隐藏字段之前说出3段文字并混合“,”,$,以及可能来自任何来源的任何其他内容(Word,RTF,InDesign,谁知道)它当然不准备成为HTML字段值,所以我想在它上面运行htmlentities()。似乎运行良好。表单发布和在第3个处理页面上我运行一个清理例程(没有htmlentities()调用的精简时间)主要用于清理任何MQ生成的转义这是我的html编码的清理功能(在我的任务流程结束时处理之前运行另一个w / o)

 function cleanHtmlEncodeStrings($str)
 {

       $text = stripslashes( $str );

       // First, replace UTF-8 characters.  (borrowed from a post on the web)
       $text = str_replace(
            array("\xe2\x80\x98", "\xe2\x80\x99", "\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x93", "\xe2\x80\x94", "\xe2\x80\xa6"),
            array("'", "'", '"', '"', '-', '--', '...'),
             $text
       );

       // Next, replace their Windows-1252 equivalents.
       $text = str_replace(
            array(chr(145), chr(146), chr(147), chr(148), chr(150), chr(151), chr(133)),
            array("'", "'", '"', '"', '-', '--', '...'),
            $text
      );

      // Next, replace CR & LFs with
      $find = array("\r\n", "\n\r", "\n", "\r", "\R" , "\t", "\x0B");
      $text = str_replace($find, " ", $text );

      $text = htmlentities ($text, ENT_QUOTES, "UTF-8");

      return $text;

 }

“Lugubrious Distance”是一本关于艺术家对她的家乡北卡罗来纳州的渴望的书。“注意到这一点不被注意是我制作的作品中的一个主题。我将平凡提升到表面,因为我发现它是最诚实,最有活力,最美丽的。美女对我很好。“

...变为

Lugubrious Distance是一本关于艺术家的书,她渴望她的家乡北卡罗来纳州。 “注意到被忽视是我制作的作品中的一个主题。我把平凡提升到表面,因为我发现它是最诚实,最有活力和最美丽的。美女对我很好。”

我不知道为什么'她被假定进入并没有被我的功能所困。

我真正的问题是......处理这些类型文本区域的防弹方法是什么?我不可能解释有人会尝试进入的每个奇怪的角色,那么更好的方法是什么?

谢谢! 富

[注意:我不是要试图双重发帖。相反,我看到我能否以更简洁的方式重述我的问题。到目前为止,它不起作用:)]

2 个答案:

答案 0 :(得分:0)

是否考虑过使用 sessions 将数据保存在服务器上以便进一步处理,而不是在服务器和浏览器之间来回移动文本?

答案 1 :(得分:-1)

我使用base64_encode / base64_decode。试试这个:

<?
$url = $_SERVER['SCRIPT_NAME'];
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($_POST['text']) {
        if (get_magic_quotes_gpc()) {
            $text = stripslashes($_POST['text']);
        } else {
            $text = $_POST['text'];
        }
        $escaped = base64_encode($text);
        ?>
        <form action="<?= $url ?>" method="post">
        <p>Hidden data: <i><?= $escaped ?></i></p>
        <input type="hidden" name="encoded" value="<?= $escaped ?>">
        <input type="submit" value="Send hidden data">
        </form>
        <?
    } else if ($_POST['encoded']) {
        $decoded = base64_decode($_POST['encoded']);
        ?>
        <p><?= htmlspecialchars($decoded) ?></p>
        <p><a href="<?= $url ?>">Try again</a></p>
        <?
    }
} else {
    ?>
    <form action="<?= $url ?>" method="post">
    <textarea name="text"></textarea>
    <input type="submit" value="Send source data">
    </form>
    <?
}
?>