PHP $ _POST不带重音符号

时间:2013-04-19 22:29:59

标签: php html post html-entities

此问题已解决,请查看我的答案以查看解决方案


我正在尝试向我的数据库添加带有重音字母的文本,通过html表单将POST提交到PHP页面,问题是重音字母会转换为不可读的字符。

我有这样的表格:

<form action="page.php" method="POST">
    <input type="textarea" id="text1" name="text1" />
    <input type="submit" value="Send" />
</form>

然后,在page.php中:

echo $_POST['text1'];

问题是如果我在我的textarea中输入àèìòù然后我提交表单,我会得到这个输出:

à èìòù

我的下一步是将带有htmlentities($_POST['text1']的重音字母转换为html实体,但我需要$_POST才能给我正确的字母。

注意:在页面头部我已经

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

我该如何解决这个问题?

修改

我试过

<form action="page.php" method="POST" accept-charset="UTF-8">
    <input type="textarea" id="text1" name="text1" />
    <input type="submit" value="Send" />
</form>

并没有解决它

编辑2

还尝试添加

<meta charset='utf-8'>

到我的文档的头部,它不起作用

编辑3

我尝试在第二页上将我的字符集设置为UTF-8,并且

echo $_POST['text1'];

显示正确的结果。

我看到问题是我使用htmlentities,使用此代码

echo htmlentities($_POST['text1']);

我得到了

&Atilde;&nbsp;&Atilde;&uml;&Atilde;&not;&Atilde;&sup2;&Atilde;&sup1; 

实际输出

à èìòù 

即使我在我的meta-tags和标题中也设置了charset。有谁知道我怎么解决它?

2 个答案:

答案 0 :(得分:1)

我将采取另一种方式 - 添加到您的PHP代码<?php header("Content-Type: text/html; charset=utf-8"); ?>。保存有元标记(某些浏览器随便忽略...)

从您提供的编码表示中,PHP回显UTF-8编码的字符串,而您的浏览器假设输出将是ISO-8859-1。设置该标题会使所有浏览器明白UTF-8是预期的,只要他们在Accept-encoding下使用它。如果他们没有,他们会barf,但我只知道一个没有的“现代”浏览器,它约占市场的0.2%。

请注意,您需要在任何其他输出之前抛出第一个这一行(或者您可以输出缓冲该批次,这会让生活更轻松,但会消耗掉一点更多记忆)

答案 1 :(得分:1)

好的,我终于解决了。即使我设置了charset,无论是用PHP标头设置它还是

header('Content-Type: text/html; charset=utf-8');

或使用HTML元标记

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

并将我的文件保存为UTF-8,但它无效。

输入àèìòù,然后使用htmlentities处理<始终生成

&Atilde;&nbsp;&Atilde;&uml;&Atilde;&not;&Atilde;&sup2;&Atilde;&sup1; 

以“可读”字符表示:

à èìòù

我刚刚改变了这个:

echo htmlentities($_POST['text1']);

到此:

echo htmlentities($_POST['text1'], ENT_QUOTES, "UTF-8");

一切正常,我打印出真正的输入。

谢谢大家的帮助!