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

Posted

技术标签:

【中文标题】数据库、字符编码、PDF 和 XML【英文标题】:Databases, character encoding, PDFs and XML 【发布时间】:2012-07-22 05:37:15 【问题描述】:

我在字符编码方面没有遇到什么问题。

情况

上传的文件已转换为 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 一件事对另一件事的苦苦工作或数组。这真的是解决方案吗?

任何建议、解决方案或指向更好方向的指点都是有帮助的,非常感谢。谢谢。

【问题讨论】:

你好,朋友,我有类似的问题,你有没有遇到过这个问题? 【参考方案1】:

如果我是你,我会做两件事中的一件。我要么只是将没有任何编码的东西存储在数据库中(作为 blob),这样数据库编码就根本不会进入它。

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

【讨论】:

【参考方案2】:

检测文件的编码是个难题,UTF很容易,因为它开头有一个BOM,否则几乎不可能正确确定编码类型。

但是,如果 XML 格式正确,它应该嵌入编码,解析器应该可以很好地处理它。我看到您正在进行从 UTF-8 到 UTF-32 的转换,这根本没有帮助,因为它只会使字符串变大一点,但是它不会更改用于对字符进行编码的代码点。

因此您应该能够向您的 XML 解析器询问文件的编码,然后在存储和/或处理之前将其从该编码更改为 UTF-8(或 32)。

【讨论】:

以上是关于数据库、字符编码、PDF 和 XML的主要内容,如果未能解决你的问题,请参考以下文章

C# XML 字符串编码问题

在 Javascript 中将 PDF 转换为 Base64 编码的字符串

带有重音符号的 XML 字符编码问题

提升读/写 XML 文件:如何更改字符编码?

PHP 的 XML 字符编码问题

带有 php 和重音字符以及 ENT_XML1 的 XML 的 UTF-8 编码