Php $\ utf-8字符上的POST为空
我正在使用CodeIgniter开发一个多语言网站。有一个表单可以将数据发布到控制器,但是当我开始使用土耳其语字符(如Php $\ utf-8字符上的POST为空,php,codeigniter,character-encoding,Php,Codeigniter,Character Encoding,我正在使用CodeIgniter开发一个多语言网站。有一个表单可以将数据发布到控制器,但是当我开始使用土耳其语字符(如öçüÜĞ等)时,$\u POST是空的 我将字符集设置为: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> var_dump($_POST)-带有土耳其字符(输入为:Türkçe karakter,但它没有显示在$_POST中) 更新2: 调试时,我发现,system.co
öçüÜĞ
等)时,$\u POST
是空的
我将字符集设置为:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
var_dump($_POST)
-带有土耳其字符(输入为:Türkçe karakter
,但它没有显示在$_POST中)
更新2:
调试时,我发现,system.core.Input
类在\u clean\u Input\u data
函数上清理输入数据
// Clean UTF-8 if supported
if (UTF8_ENABLED === TRUE)
{
$str = $this->uni->clean_string($str);
}
因此,在$\u POST
到达我的控制器之前,编辑器\u tr
值已经被该函数中的system.core.Utf8
类清除:
function clean_string($str)
{
if ($this->_is_ascii($str) === FALSE)
{
$str = @iconv('UTF-8', 'UTF-8//IGNORE', $str);
}
return $str;
}
这不是一个答案,但你可能想看一看,看看一切是如何进来的
foreach($_POST as $key => $val)
{
$post_data[$key] => $val;
}
print_r($post_data);
然后试试CI的帖子
foreach($_POST as $key => $val)
{
$post_data[$key] => $this->input->post($key);
}
print_r($post_data);
由于评论堆积如山,可能会被忽视,我将发布更多的建议 读者请记住,这是处理$\u POST数据值,而不是在网页上显示数据 此用户似乎有类似的问题: 这里有一个关于类似Bitbucket的报告: : 删除链接:Ellisplates已向公众关闭此回购协议 也许将此添加到index.php会有所帮助(可能不会):
ini\u集(“默认字符集”、“UTF-8”)代码>
仔细检查并确保没有在该字段上运行任何验证或准备规则。类似于url\u title()
的操作将删除这些字符。确保表单标记具有accept字符集:
<form method="post" action="" accept-charset="utf-8">
如果您不想在MAMP安装中使用以前的PHP版本,可以使用:
$\u请求
要获取数据而不是$\u POST
$\u REQUEST
是一个关联数组,默认情况下包含$\u GET
、$\u POST
和$\u COOKIE
的内容
这将返回由于某种原因而中断的所有数据 你试过吗?与<代码> >我的.HTAccess文件相关联的修复可能会引起问题,但邓诺.<代码>考虑是否提供它?@ MordMaTiGaN抱歉,这是一个打印错误。@ J·J i在您的评论后实现了McStudio到我的代码库中,但仍然没有运气。当$\u POST中有utf-8字符时,它会忽略该元素。@Khez这是我的.htaccess文件:RewriteEngine On RewriteCond%{REQUEST\u FILENAME}-f RewriteCond%{REQUEST_FILENAME}-重写规则^(.*)$index.php/$1[L]
您给出的第一个链接解决了问题。呸。没想到MAMP&PHP会导致这种情况,但你永远也不知道。谢谢!这是一个好消息,感谢您如此迅速地做出响应并及时提供相关细节。祝你的项目好运:)谢谢Madmartigan,希望这能帮助其他遇到同样问题的人。我花了大约2个小时在这个问题上,从来没有想到MAMP会引起这么有趣的问题。谢谢:)这应该是被接受的解决方案,或者至少是更高的投票率。Ellisab提供的bitbucket解决方案(在@WesleyMurch答案中)不再可用,因为Ellisab关闭了回购协议。
foreach($_POST as $key => $val)
{
$post_data[$key] => $val;
}
print_r($post_data);
foreach($_POST as $key => $val)
{
$post_data[$key] => $this->input->post($key);
}
print_r($post_data);
<form method="post" action="" accept-charset="utf-8">
$value = utf8_decode($this->input->post('field_name'));