我在字符编码方面遇到了一些小问题。
情况
上传的文件将被转换为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
将一种东西替换成另一种东西。这真的是解决方案吗?
如果您有任何建议、解决方案或指向更好方向的指点,都会非常有帮助并且感激不尽。谢谢。