2012-03-19 65 views
0

我失去了重音字符。UTF8 - > Latin1難度,PHP

從PHP我下載了一個使用UTF8的xml文件,而我的PHP腳本使用Latin1。我無法設法將UTF8轉換爲Latin1。

我已經試過這樣:

$meta=mb_convert_encoding($meta,'CP1252','UTF-8'); 

$meta=mb_convert_encoding($meta,'UTF-8'); 
$meta=mb_convert_encoding($meta,'CP1252','UTF-8'); 

但無論哪種方式的重音符號被破壞,變成2個字符。

輸入:

<title>First book of zoölogy</title> 

輸出:

<title>First book of zoo?logy</title> 

我想通了我自己,看到我的回答如下。謝謝你們每一個人的幫助!

+0

請顯示一些示例輸入和輸出,給出更多的細節和代碼。這太模糊了,不能專門回答。 – deceze 2012-03-19 04:07:11

+0

我已經添加了一個輸入和輸出示例。 – Alasdair 2012-03-19 04:10:34

+1

該示例顯示了第一個代碼段的結果?你確定你放入函數的文本是UTF-8編碼嗎? – deceze 2012-03-19 04:12:33

回答

1

更改表的排序規則做Utf8_general_ci和conections到數據庫使用前:

mysql_set_charset("utf8"); 

我認爲這可以解決你的問題。

+0

一切都設置爲Latin1,因爲這是我想要使用的,而不是UTF8。我已經將mysql_set_charset設置爲Latin1。重音字符應該能夠從UTF8轉換爲Latin1,一開始就是這樣,在這之後沒有使用UTF8,但是在某處字符被破壞。 – Alasdair 2012-03-19 03:50:19

+3

@Alasdair。爲什麼你想在utf8提供更多的時候繼續使用Latin1 ..? – Ben 2012-03-19 04:07:14

+0

因爲它使用較少的字節,我不需要UTF8。 – Alasdair 2012-03-19 04:08:47

0

也許MySQL服務器的默認字符集是UTF-8。試試這個:
插入下面的查詢你的MySQL連接細節後:

mysql_query("SET NAMES latin1"); 
+0

不是,默認值爲latin1,現在似乎發生此問題在字符串進入數據庫之前,所以這是一個PHP問題,而不是MySQL問題。 – Alasdair 2012-03-19 04:20:19

1

這個固定:

$meta=iconv('UTF-8','CP1252//TRANSLIT',$meta); 

我以前不知道的iconv,我想有隻mb_strings工作與,但iconv工作得很好。