数据库、字符编码、PDF和XML

7

我在字符编码方面遇到了一些小问题。

情况

上传的文件将被转换为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友好”的格式。然而,经过大量的谷歌搜索,只找到了一些替代方案或者使用str_replace将一种东西替换成另一种东西。这真的是解决方案吗?

如果您有任何建议、解决方案或指向更好方向的指点,都会非常有帮助并且感激不尽。谢谢。


你好,伙计。我遇到了类似的问题,你有解决吗? - czioutas
2个回答

0
检测文件的编码是一个困难的问题,UTF-8很容易因为它在开头有一个BOM,但如果没有的话,准确地确定编码类型几乎是不可能的。
然而,如果XML格式正确,它应该嵌入了编码,并且解析器应该能够很好地处理它。我看到你正在将UTF-8转换为UTF-32,这样做并没有帮助,因为它只是使字符串变得更大,但它并不改变用于编码字符的代码点。
因此,在存储和/或处理之前,您应该能够询问您的XML解析器文件的编码,然后将其从那个编码更改为UTF-8(或32)。

0

如果我是你,我会做两件事中的一件。我要么只是将东西存储在数据库中而不进行任何编码(作为blob),这样数据库编码就完全不涉及。

另一件事情是根本不将信息存储在数据库中。只需将其存储在文件中(将文件命名为某些唯一哈希值),然后只需在数据库中创建一个表,该表存储具有xml的文件位置。然后您可以直接从文件中提供xml。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接