lun*_*gov 13 php encoding utf-8 character-encoding mojibake
我是新来的,所以如果我做错了什么,我道歉.
我有一个表单,用于将用户输入提交到另一个页面.用户需要键入ä,ö,é等...我已在文档中放置了以下所有内容:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
header('Content-Type:text/html; charset=UTF-8');
<form action="whatever.php" accept-charset="UTF-8">
Run Code Online (Sandbox Code Playgroud)
我甚至尝试过:
ini_set('default_charset', 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
当另一个页面加载时,我需要检查用户输入的内容如下:
if ( $_POST['field'] == $check ) {
...
}
Run Code Online (Sandbox Code Playgroud)
但如果他输入类似'München'的东西,那么PHP会将'München'与'München'进行比较,即使它应该也不会触发TRUE.由于它在任何地方都指定了UTF-8,我猜测服务器正在转换为其他东西(我在另一个线程上读取的Windows-1252)因为它不支持或未配置为UTF-8.我在加载到生产之前在本地服务器上使用Apache; 我没有改变(也不知道如何)任何默认设置.我一直在研究Windows 7,使用Notepad ++进行编辑,用ANSI输入我的文件.如果我bin2hex('München')得到'4dc3bc6e6368656e'.
如果我echo $_POST['field'];正确显示'München'.
我到处都在研究解释,我发现我应该包括我已经拥有的那些标签/标题.
任何帮助深表感谢.
gio*_*ele 14
你面临着许多不同的问题,让我们从最简单的问题开始吧.
问题1)你说echo $_POST['field'];会正确显示它吗?"显示"是什么意思?它可以在两种情况下正确显示:
所以,echo $_POST['field'];正确的事实告诉你什么.
问题2)你正在使用
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
header('Content-Type:text/html; charset=UTF-8');
Run Code Online (Sandbox Code Playgroud)
这是PHP代码吗?如果是,则会出错,因为必须在发送任何字节之前设置标头.如果你这样做,你将不会设置Content-Type标题,PHP应该生成一个警告.
问题3)你正在使用
<form action="whatever.php" accept-charset="UTF-8">
Run Code Online (Sandbox Code Playgroud)
一些浏览器(IE,大多数)忽略了accept-charset它们是否可以强制要以ASCII或ISO Latin-1发送的数据.所以数据将采用UTF-8格式并声明为ISO Latin-1或ISO Latin-1并作为ISO Latin-1发送(但第二种情况不是你的情况).
看看/sf/answers/598290311/,看看如何解决这个问题.
问题4)你在比较哪些字符串?例如,如果你有
$city = "München"
$_POST['city'] == $city
Run Code Online (Sandbox Code Playgroud)
此代码的结果将取决于PHP文件的编码.如果文件以ISO Latin-1编码并且$_POST正确包含UTF-8数据,==则将比较不同的字节并返回false.
| 归档时间: |
|
| 查看次数: |
41218 次 |
| 最近记录: |