PHP 5.4 multipart/form-data UTF-8编码

she*_* me 6 php encoding character-encoding php-5.4

我在将表单数据发布为"multipart/form-data"时遇到UTF-8编码问题,没有multipart/form-data,一切运行良好.但由于我必须在同一篇文章上传文件,我需要使用multipart/form-data.

从PHP 5.3.x升级到PHP 5.4.4-14(与Debian Wheezy捆绑在一起)后出现问题,相同的脚本适用于PHP 5.3测试服务器.

  • 我的所有文件都以UTF-8保存并且有 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">标签.
  • 我在不同的计算机上测试过不同的浏览器
  • mb_detect_encoding()将发布的字符串检测为UTF-8
  • 我尝试AddDefaultCharset utf-8过Apache配置.

在这里你可以测试我的脚本,你可以用土耳其字符复制/粘贴以下字符串(例如字符串:öçşipğopüp)

http://sa.chelona.com.tr/haber-ekle.html

我还发现当在PHP中将表单作为multipart/form-data发布时,UTF-8文本中的相关问题是乱码但它建议重新安装apache/php,这对我的情况是不可能的.这是一个已知的PHP/Apache错误吗?

Bab*_*aba 5

做一个简单的转换UTF-8土耳其字母ISO-8859-9,问题应该解决

iconv('UTF-8', "ISO-8859-9", $string);
Run Code Online (Sandbox Code Playgroud)

示例输入: öç?ip?opüp

示例表格:

<form method="post" enctype="multipart/form-data" action ="self.php">
<input type="text" name="hello" />
<input type="submit" name="test" />
</form>
Run Code Online (Sandbox Code Playgroud)

简单的油底壳:

var_dump($_POST['hello'],iconv('UTF-8', "ISO-8859-9", $_POST['hello']));
Run Code Online (Sandbox Code Playgroud)

产量

string 'öçşipğopüp ' (length=16)
string 'öçþipðopüp ' (length=11)
Run Code Online (Sandbox Code Playgroud)


she*_* me 3

我写这篇文章是为了回答我自己的问题...我希望它对其他人有帮助...

如果您使用 PHP 5.4.x,将 mbstring.http_input 从“auto”设置为“pass”可能会解决您的问题。