2012-07-23 46 views
7

我在字符編碼方面沒有什麼問題。數據庫,字符編碼,PDF和XML

的情況

文件上傳被轉換成XML。該文件的字符編碼會有所不同,但是可能會出現智能引號,實體和各種ASCII。一旦這個文件被轉換成XML,它被存儲在一個數據庫中。根據用戶的請求,XML可能會從數據庫中提取出來並轉換成數組,然後將其創建爲PDF。

問題

字符編碼。字符編碼從一開始就發揮了重要的作用。我想知道;

  • 什麼字符編碼通常涵蓋整個「頻譜」。例如,°解析XML或智能報價時無法識別()。智能報價將變成’等等
  • 如何在數據庫中存儲XML。加密是一種可能性,但是數據庫編碼是我迷失的地方。
  • 如何讓實體,智能引號(以及其他可能導致問題的字符)在數據庫中正確顯示,並在屏幕前顯示Å

嘗試在周圍的工作

我做了這「嘗試」來解決我的問題,各種功能 - 將某些字符轉換成另一種。不過,我認爲這是完全是這樣做的錯誤方法,我應該改變字符編碼。

/* 
* Converts smart quotes to ascii 
*/ 
function convert_smart_quotes($string) { 
    $string = iconv("UTF-8", "UTF-32", $string); 
    $string = mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-32'); 
    $string = str_replace('', '', $string); 
    $search = array('‘', '’', '“', '”', '—'); 
    $replace= array("'", "'", '"', '"', '-'); 
    $string = str_replace($search, $replace, $string); 
    return $string; 
} 
/* 
* Converts some entities to an ISO format? 
* 
* Example : ° => ° 
*/ 
function entity_to_iso($string) { 
    return html_entity_decode($string, ENT_QUOTES & ~ENT_COMPAT, 'ISO-8859-1'); 
} 

最終,我的問題在於我不知道上傳文件的編碼。我有一個switch的想法,試圖將字符轉換爲更多的數據庫和「PDF格式友好」。然而,谷歌搜索引發了很多苦惱的工作或數組,其中一件事情到另一件事情。這真的是解決方案嗎?

任何建議,解決方案或手指指向一個更好的方向都是有益的,非常讚賞。謝謝。

+0

hello mate,我有類似的問題,你有沒有得到任何與此? – Drakoumel 2013-06-01 20:44:56

回答

0

檢測文件的編碼是一個難題,UTF很容易,因爲它在開始時有一個BOM,但否則幾乎不可能正確確定編碼類型。

但是,如果XML格式正確,它應該嵌入編碼,解析器應該很好地處理它。我看到你正在進行從UTF-8到UTF-32的轉換,這根本無濟於事,因爲它只是使字符串變大一點,但它不會更改用於對字符進行編碼的代碼點。

因此,您應該能夠問您的XML解析器的文件的編碼,然後在存儲和/或處理之前將其更改爲UTF-8(或32)。

1

如果我是你,我會做兩件事之一。我要麼將數據庫中沒有任何編碼的東西(作爲一個blob)存儲起來,這樣數據庫編碼根本就不會出現。

你可以做的另一件事是不把信息存儲在數據庫中。只需將它存儲在一個文件中(將該文件命名爲一些將是唯一的散列),然後在數據庫中創建一個存儲具有xml文件位置的表。然後,您可以直接從文件中提供xml。