我有我的網站上德語字符的問題,網站的UTF-8和德文字符?
在HTML/PHP的一部分我有這樣的代碼來設置UTF-8:
<meta charset="utf-8">
在MySQL
,我有這樣的代碼設置UTF-8
SET CHARSET 'utf8';
這裏是德國的一些字:
Gemäß
這裏是一個字看起來如何在MySQL表:
Gemäß
下面是該字在網站上表示:
Gemäß
什麼是問題?謝謝。
我有我的網站上德語字符的問題,網站的UTF-8和德文字符?
在HTML/PHP的一部分我有這樣的代碼來設置UTF-8:
<meta charset="utf-8">
在MySQL
,我有這樣的代碼設置UTF-8
SET CHARSET 'utf8';
這裏是德國的一些字:Gemäß
這裏是一個字看起來如何在MySQL表:
Gemäß
下面是該字在網站上表示:Gemäß
什麼是問題?謝謝。
嘗試SET NAMES 'utf8'
或SET NAMES 'utf-8'
。其中一些適用於葡萄牙語,可能也適用於德語。我不記得哪一個是正確的,但如果不是,會產生一個錯誤。
首先,確保數據庫中有UTF-8字符。
之後,嘗試使用SET NAMES 'UTF8'
連接到MySQL後:
$con=mysqli_connect("host", "user", "pw", "db");
if (!$con)
{
die('Failed to connect to mySQL: ' .mysqli_connect_errno());
}
mysqli_query($con, "SET NAMES 'UTF8'") or die("ERROR: ". mysqli_error($con));
正如manual說:
SET NAMES表示的字符集客戶端將用來發送SQL 語句到server ...它還指定服務器應該使用的字符集將結果發送回客戶端。
你應該確保CONNECTION也是utf-8。
與mysqli的,這是有事情做這樣的:
$connection = mysqli_connect($host, $user, $pass, $db_name);
$connection->set_charset("utf8");
現在,如果不知爲何,你結束了與數據庫中的字符錯誤,有一種方法,以作出正確的:
使用
<meta charset="utf-8">
在HTML 4.0.1使用
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
我使用此代碼來獲得標題:
$title = mysql_real_escape_string(htmlentities($_POST['title']));
我只是重寫,要
$title = $_POST['title'];
不建議使用mysql_ *,並且mysql_real_escape_string不會保證數據庫的安全。僅供參考。 – Jonast92
現在你確實有一個錯誤,而第一條語句只會擾亂你的輸出,現在你已經犯了危險。始終爲相應的輸出轉義您的數據,並且僅限於此輸出。要在HTML頁面上顯示數據,您應該使用'htmlspecialchars()',使用'mysqli_real_escape_string()'或參數化查詢在SQL語句中插入一個字符串。 – martinstoeckli
@ Jonast92如果正確應用了*,mysql_real_escape_string'完全可以防止SQL注入*。問題是許多人沒有適當地運用它。 – deceze
我有同樣的問題。這是我解決了使用:
如果您已經創建表,那麼您需要修改字符集:
alter table <table name> convert to character set utf8 collate utf8_general_ci.
你的表字符集默認情況下,由MySQL設置爲latin_swedish
。
此外,在檢索數據並將其顯示給您的頁面時,您可能會遇到一些問題。對於這種情況,包括:mysql_set_charset('utf8')
就在您連接數據庫的行的下方。 如:
mysql_connect('localhost','root','');
mysql_select_db('my db');
mysql_set_charset('utf8');
結果,就好像它們是由ヶ輛()處理HTML實體編碼,不知從形式接收或正在處理的,如果你的變量ibserted說,例如一個WYSIWG編輯器?
無論如何,這些應該在html模板上打印得很好,但是html_entity_decode()應該這樣做。
希望這有助於
您需要爲php 5.x
$yourNiceLookingString =
htmlspecialchars ($YourStringFromDB, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1');
做到這一點,爲php 4.x
$yourNiceLookingString = htmlspecialchars($YourStringFromDB);
在你的數據庫將數據類型設置爲使用UTF-8,以及這應該解決問題。
你是怎麼把它放到數據庫中的?聲稱你發送utf-8之後,如果你只是拋出latin-1字節,那麼設置字符集並沒有幫助。 – geoffspear
@Wooble說什麼。您必須確保您插入的字符串使用相同的編碼。僅僅因爲網站的meta標籤顯示UTF-8並不意味着代碼中的字符串也會是UTF-8(雖然我總是認爲UTF-8是默認的編碼...我看到我可能會做一些事情在這裏和那裏也是錯誤的)。 – Renan
@Wooble 在我的連接。php是這樣的代碼:mysql_set_charset('utf8'); 我插入這樣的數據: mysql_query(「INSERT INTO slike(標題,字符串,材料,價格,維度,lang,貨幣)VALUES('$ title','$ code','$ material','$ price ','$ dimensions','$ lang','$ price')「)或die(mysql_error()); – user1814358