2013-12-11 79 views
3

我有一个很奇怪的现象,试图键入德国元音,如“äöüß”到文本框时,旧的PHP项目迁移从ISO-8859-1到UTF-8当表单提交

德国Umlaute断裂在提交我接收破碎的像 “äöüÔ

首部设置为

<?php header("Content-Type:text/html;charset=UTF-8"); ?> 
<meta charset="UTF-8" /> 

的形式设置为

<form accept-charset="utf-8"> 

等等 - 我尝试了所有我能想到的 - 任何人都有一个ide或经验与类似的问题?

最好的问候, 卢波

+1

“âââ¼Ã¢”基本上是UTF-8编码数据“äöüß”误解为windows-1252编码。究竟在哪里(在哪个节目中,在哪些条件下)你看到“ââüÃÔ? –

+0

当前我正在运行xampp的本地主机环境中进行测试,并在Windows 8计算机上使用新的Chrome版本作为浏览器。 – Lupo

+0

你从哪里收到它们?如果你看到它们“在你的数据库中”,(phpmyadmin),你必须改变你把它放入的varchar字段的编码。 – Alexander

回答

1

我找到了解决办法这就是我的案子:

我不得不接收字符集从UTF-8改回ISO-8859-15,则字段值看起来再好 - 为了能够处理接收到的数据,我必须utf8_encode他们 - 似乎有点奇怪,但它现在工作正常。

谢谢大家的时间和Jukka的帮助。

最好的问候, 卢波

+1

问题在于接收器没有解释他们实际编码的字符。您向服务器发送了UTF-8,您将UTF-8输出回页面,但由于某种原因它被解释为ISO-8859。您可以通过恢复到之前的情况并明确告诉浏览器在“视图”>“编码”菜单中将数据解释为UTF-8来确认这一点。如果你真的需要处理UTF-8(你应该),你的修复不是一个修复。 – deceze

+0

我同意你的解释,但我不能确认它,因为当我改变浏览器中的编码(默认情况下是utf-8)时,字符外观保持中断。 – Lupo

+0

然后你在链式浏览器→服务器→浏览器的某个地方打破角色。我们需要看整个代码来说明在哪里。也许这同时有助于:[在Web应用程序中处理Unicode前后](http://kunststube.net/frontback/) – deceze

0

我很高兴你设法找到一个解决方案。 如果你不想担心这么多不同的字符集编码,或者如果其他字符不起作用,这里的替代方案: 我使用mysqli DB连接(和PHPV5)Form Post写入/插入MySQl DB。

$Notes = $_POST['Notes']; //can be text input or textarea. 


$Notes = str_replace('"', '&quot;', $Notes); //double quotes for mailto: emails. 
$von = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é"); //to correct double whitepaces as well 
$zu = array("&auml;","&ouml;","&uuml;","&szlig;","&Auml;","&Ouml;","&Uuml;","&nbsp;","&#233;"); 
$Notes = str_replace($von, $zu, $Notes); 
echo " Notes:".$Notes."<br>" ; 
$Notes = mysqli_real_escape_string($link, $Notes); //for recommended mysqli DB connection. 
//$Notes = mysql_real_escape_string($Notes); //for old deprecated mysql DB connection. 

// mysqli_real_escape_string Escapes special characters in a string for use in an SQL statement 

echo " Notes:".$Notes ; //ready for inserting 
//Optinal: 

$ charset = mysqli_character_set_name($ link); //只适用于mysqli数据库连接 printf(“检查你的字符集但不是必需的%s \ n”,$ charset);

+0

如果出现有趣的字符,请在标题中添加此行。 KarlosFontana