此问题已解决,请查看我的答案以查看解决方案
我正在尝试向我的数据库添加带有重音字母的文本,通过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']);
我得到了
à èìòù
实际输出
à èìòù
即使我在我的meta-tags和标题中也设置了charset。有谁知道我怎么解决它?
答案 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
处理<始终生成
à èìòù
以“可读”字符表示:
à èìòù
我刚刚改变了这个:
echo htmlentities($_POST['text1']);
到此:
echo htmlentities($_POST['text1'], ENT_QUOTES, "UTF-8");
一切正常,我打印出真正的输入。
谢谢大家的帮助!