2012-07-23 69 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。