2013-12-11 124 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