转换下标数字的最简单方法

时间:2015-01-28 17:07:37

标签: php character-encoding

我们从不同的来源(图书馆系统)获得书名(可能有不同的编码,但大多数是utf8)。这些字符串显示在Web中,并通过导出到Endnote和RefWorks。 RefWorks(Windows报价系统)不接受除ANSI之外的任何其他编码。

在RIS / Refworks导出中,激活行

$smarty = iconv("UTF-8", "Windows-1252", $smarty);

示例字符串

Diphosphen-komplexes (CO) 5CrPhPPPhCr(CO) 5

突然切断了第一个下标char(矩形)之后的所有内容。这些字符也没有在HTML中正确打印,但这个输出没问题,因为没有任何内容被切断。在UTF-8导出文件编码中,也没有任何内容被切断。尽管如此,Windows软件无法读取UTF-8。

最简单的解决方案是将任何下标数转换为常规数。一切都会好起来的。但我找不到任何简单的解决方案。使用十六进制代码是我唯一能想象的。此解决方案也适用于我们的Solr指数。

有谁知道更好的解决方案?

1 个答案:

答案 0 :(得分:1)

示例字符串包含Private Use code points,例如U + E5F8。根据定义,没有标准赋予它们任何意义;它们的使用完全是私人协议。因此,在不知道或推断所涉及的私人协议的情况下,不可能将它们转换为任何东西,或与它们做任何事情。某些系统使用专用代码点来表示某些特殊字体分配给这些点的符号。知道该字体是什么并检查它可能因此有助于找出协议。

转换需要以临时方式单独编码,因为涉及到一个临时协议。

“ANSI”,这里表示windows-1252,不包含任何下标字符。在化学式的上下文中,用正常数字替换下标数字不会改变含义,并且公式是可以理解的,尽管它看起来不专业。

转换为HTML格式(或其他富文本格式)时,您可以使用包含在导致下标呈现的元素中的普通数字(或以其他方式设置样式)。 HTML具有sub元素,但它的实现在浏览器之间有所不同,往往质量很差,因此更好的方法是生成<span class=sub>...</span>并使用CSS设置垂直位置和字体大小。