2011-05-10 117 views
2

我$从形式_POST'ing以下标题:PHP - 逃离长破折号

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

不知道有没有什么帮助,但它似乎是UTF-8编码搞混了(控制字符在我看来,有点眼熟......)。尝试输出utf8_encode()utf8_decode()

+0

当我utf8_decode()发布的内容是“Google新合作伙伴Android更新计划:非常有希望吗?也许;我们会看到”。我更多地问为什么它会以这种格式放入$ _POST中。谢谢。 – barfoon 2011-05-10 20:39:19

+0

如果尝试使用utf8_encode()输出,会发生什么情况?我想问题是表单提交了错误的字符集/内容类型。尝试确定浏览器使用的字符集。或者通过PHP头部('Content-type:text/html; charset = utf-8');或HTML元标记:'' – GeneSys 2011-05-10 20:55:28

+0

使用utf8_encode()输出我输入的问题中的原始字符串。我已经在表单 – barfoon 2011-05-10 21:02:53

2

带表格的页面和显示页面都需要使用相同的字符集。要重现您展示的行为,我不得不创建2页,一个形式,

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

其发布到一个页面,而不说。

如果我把meta标签放在两个页面中,它会正确输出,如果我从两个页面中删除它,它都会正确输出。

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


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的第一行,我会得到你描述的行为。

+0

我的表单页面和显示页面都有该标签,我仍然可以看到发布内容。该标记位于我网站的标题代码中,在所有页面中一致 – barfoon 2011-05-10 22:24:15

+0

我将使用我使用的示例更新我的答案。看看问题是否发生在你的浏览器/服务器组合中,如果没有,你的页面中可能还有其他东西会影响它。 – John 2011-05-10 22:58:07

+0

在上面看到我的评论是什么伎俩。谢谢你的帮助约翰。 – barfoon 2011-05-11 18:14:07