POST submit中的PHP重音字符

POST submit中的PHP重音字符,php,forms,post,utf-8,character-encoding,Php,Forms,Post,Utf 8,Character Encoding,我在submit.php上有一个HTML表单,页面编码为UTF-8(使用meta标记),当表单提交到process.php(通过POST)时,一些变量存储在会话中,页面使用Header:Location返回submit.php,然后使用会话变量重新显示一些输入的信息 如果我输入一个重音字符,例如é(é),当页面返回submit.php时,它无法正确呈现该字符,我会得到一个ã(ã)和一个©(©) 我应该在哪里解决这个问题?我假设它是服务器端的,因为呈现的页面总是UT

我在submit.php上有一个HTML表单,页面编码为UTF-8(使用meta标记),当表单提交到process.php(通过POST)时,一些变量存储在会话中,页面使用Header:Location返回submit.php,然后使用会话变量重新显示一些输入的信息

如果我输入一个重音字符,例如é(é),当页面返回submit.php时,它无法正确呈现该字符,我会得到一个ã(ã)和一个©(©)

我应该在哪里解决这个问题?我假设它是服务器端的,因为呈现的页面总是UTF-8(提交前后浏览器都会确认页面是UTF-8)

解决方案:


字符串在某一点上通过了htmlentities(),结果是它有一个默认的字符编码ISO-8859-1。答案是在函数调用中简单地指定“UTF-8”。

您需要找到发生这种情况的地方,并修复它

可能会显示一些代码-可能有人有想法

$_SESSION['thestring'] = $_POST['thestring']
不能合理地成为问题的根源。这里PHP只是逐字复制两个字节。这里不会有字符集转换。因此,任何转换都可能发生在之前或之后

要确保$\u POST不是cultprit,请检查您的
是否包含
accept charset=“UTF-8”
。这经常被忽视。其次,出于测试目的,在receival的右侧输出
$\u POST[“thestring”]
。如果这里出现问题,您将需要Firebug和xdebug


会话存储或PHP不太可能修改
$\u会话中的字符串内容。这就是为什么我会假定bug毕竟在输出页面中。制作一个单独的测试页面,并在那里
print$\u SESSION[“thestring”]
。不要忽略
标题(“内容类型:text/html;charset=utf-8”)

您的“utf-8编码页面”由哪些字符组成?常规拉丁字符?定义“未正确呈现”。发生了什么?所谓“未正确呈现”,我的意思是我得到了一个“ã”和一个“©”,而不是我所期望的“é”。@beeglebug您是否100%确定页面呈现为UTF-8?你能签入你的浏览器设置吗?您使用的是什么会话处理程序,默认的会话处理程序?事实上,根本不应该有html实体,没有“©”或“é”。检查更改数据的脚本。你写的代码。这就是问题的原因。不幸的是,代码相当复杂,但本质上它在process.php上执行$\u SESSION['thestring']=$\u POST['thestring'],然后在submit.php上回显$\u SESSION['thestring']。这与使用header()和会话无关,是吗?PHP是否有我需要设置的内部字符编码,以便在传递时,2字节字符始终被解释为2字节?感谢Pekka,这正是您所说的,某些内容使用了ISO-8859-1。在文件的早期定义字符集(前1024个字符)也很重要,否则它可能会被忽略。