5

这个问题解决了,查看我的回答看看解决方案


我正在尝试通过 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 中输入然后提交表单,我会得到以下输出:

à èìòù

我的下一步是将重音字母转换为 html 实体,htmlentities($_POST['text1']但我需要$_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; 

实际输出

à èìòù 

即使我也在我的元标记和标题中设置了字符集。有谁知道我该如何解决?

4

2 回答 2

3

好的,我终于解决了。即使我正在设置字符集,无论是否使用 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");

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

谢谢大家的帮助!

于 2013-04-20T20:26:08.403 回答
2

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

根据您提供的编码表示,PHP 正在回显一个 UTF-8 编码的字符串,而您的浏览器假定输出将是 ISO-8859-1。设置该标头将使所有浏览器都明白 UTF-8 是预期的,前提是它们在 Accept-encoding 下拥有它。如果他们不这样做,他们会呕吐,但我只知道一种“现代”浏览器没有,它约占市场的 0.2%。

请注意,您需要先抛出该行然后再进行任何其他输出(或者您可以输出缓冲很多,这使生活更轻松,但会消耗更多内存)

于 2013-04-19T22:45:44.607 回答