PHP - 逃避密码破灭

时间:2011-05-10 20:26:31

标签: php forms encoding

我从表格中获得以下标题$ _POST:

Google’s New Partner Android Update Initiative: Very Promising — Maybe; We’ll See

在处理程序页面上,如果我做的第一件事就是

  echo "<pre>";
  print_r($_POST);
  die();

我明白了:

Google’s New Partner Android Update Initiative: Very Promising — Maybe; We’ll See

我知道有转换功能和功能转义字符及其HTML等价物,但我如何确保以正确的编码将此内容添加到$ _POST中?

干杯,

2 个答案:

答案 0 :(得分:2)

不确定这是否有帮助,但似乎UTF-8编码混淆了(控制字符对我来说似乎有些熟悉......)。尝试使用utf8_encode()utf8_decode()输出。

答案 1 :(得分:2)

带有表单的页面和显示页面都需要使用相同的字符集。要重现您显示的行为,我必须使用

创建2个页面,一个表单

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

发布到没有它的页面。

如果我将元标记放在两个页面中,它会正确输出,如果我从两个页面中删除它,它会正确输出。

如果只有表单有,你会得到你发布的内容,如果只有接收页面有,你会得到?。


test.php的

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<form method="post" action="test2.php">
<input type="text" name="string">
<input type="submit">
</form>

test2.php

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<?php
if(isset($_POST['string']))
{
    echo "<pre>";
    print_r($_POST['string']);
    die();
}
?>

如果我将你的字符串粘贴到test.php的输入框中,点击提交,我会在test2.php中正确地恢复它。如果我删除test2.php的第一行,我会得到你描述的行为。