2013-05-22 69 views
7

我有我的網站上德語字符的問題,網站的UTF-8和德文字符?

在HTML

/PHP的一部分我有這樣的代碼來設置UTF-8:

<meta charset="utf-8"> 
在MySQL

,我有這樣的代碼設置UTF-8

SET CHARSET 'utf8'; 
  1. 這裏是德國的一些字:Gemäß

  2. 這裏是一個字看起來如何在MySQL表:

    Gem&Atilde;&curren;&Atilde;Ÿ

  3. 下面是該字在網站上表示:Gemäß

什麼是問題?謝謝。

+1

你是怎麼把它放到數據庫中的?聲稱你發送utf-8之後,如果你只是拋出latin-1字節,那麼設置字符集並沒有幫助。 – geoffspear

+0

@Wooble說什麼。您必須確保您插入的字符串使用相同的編碼。僅僅因爲網站的meta標籤顯示UTF-8並不意味着代碼中的字符串也會是UTF-8(雖然我總是認爲UTF-8是默認的編碼...我看到我可能會做一些事情在這裏和那裏也是錯誤的)。 – Renan

+0

@Wooble 在我的連接。php是這樣的代碼:mysql_set_charset('utf8'); 我插入這樣的數據: mysql_query(「INSERT INTO slike(標題,字符串,材料,價格,維度,lang,貨幣)VALUES('$ title','$ code','$ material','$ price ','$ dimensions','$ lang','$ price')「)或die(mysql_error()); – user1814358

回答

0

嘗試SET NAMES 'utf8'SET NAMES 'utf-8'。其中一些適用於葡萄牙語,可能也適用於德語。我不記得哪一個是正確的,但如果不是,會產生一個錯誤。

1

首先,確保數據庫中有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 ...它還指定服務器應該使用的字符集將結果發送回客戶端。

0

你應該確保CONNECTION也是utf-8。

與mysqli的,這是有事情做這樣的:

$connection = mysqli_connect($host, $user, $pass, $db_name); 
$connection->set_charset("utf8"); 

現在,如果不知爲何,你結束了與數據庫中的字符錯誤,有一種方法,以作出正確的:

  1. PHP腳本,像現在這樣檢索信息,即不設置連接。這樣,這個錯誤就會被反轉和糾正,並且在你的php文件中,你將得到正確的utf-8格式的字符。
  2. 在PHP腳本,寫回的信息與設定在這一點上連接到UTF-8
  3. 你應該看到的字符正確的數據庫中的
  4. 現在改變你的網站的所有讀/寫功能使用UTF-8從現在起
0
在HTML5

使用

<meta charset="utf-8"> 

在HTML 4.0.1使用

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
1

我使用此代碼來獲得標題:

$title = mysql_real_escape_string(htmlentities($_POST['title'])); 

我只是重寫,要

$title = $_POST['title']; 
+0

不建議使用mysql_ *,並且mysql_real_escape_string不會保證數據庫的安全。僅供參考。 – Jonast92

+2

現在你確實有一個錯誤,而第一條語句只會擾亂你的輸出,現在你已經犯了危險。始終爲相應的輸出轉義您的數據,並且僅限於此輸出。要在HTML頁面上顯示數據,您應該使用'htmlspecialchars()',使用'mysqli_real_escape_string()'或參數化查詢在SQL語句中插入一個字符串。 – martinstoeckli

+0

@ Jonast92如果正確應用了*,mysql_real_escape_string'完全可以防止SQL注入*。問題是許多人沒有適當地運用它。 – deceze

0

我有同樣的問題。這是我解決了使用:

如果您已經創建表,那麼您需要修改字符集:

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'); 
0

結果,就好像它們是由ヶ輛()處理HTML實體編碼,不知從形式接收或正在處理的,如果你的變量ibserted說,例如一個WYSIWG編輯器?

無論如何,這些應該在html模板上打印得很好,但是html_entity_decode()應該這樣做。

希望這有助於

0

您需要爲php 5.x

$yourNiceLookingString = 
htmlspecialchars ($YourStringFromDB, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1'); 

做到這一點,爲php 4.x

$yourNiceLookingString = htmlspecialchars($YourStringFromDB); 
0

在你的數據庫將數據類型設置爲使用UTF-8,以及這應該解決問題。