【发布时间】:2012-01-16 00:34:19
【问题描述】:
我希望能够在一次调用中从 any 字符集转换为干净的 UTF-8(我们使用的是 PHP)。
用于 Apache Solr 索引;问题是 Solr 使用的 XML Parser(用 Java 编写)在遇到非法 UTF-8 时会抛出异常。
我们尝试了 iconv(),但它有时会在警告后剪切字符串,丢失一些数据,即使启用了 //TRANSLIT 和/或 //IGNORE。
utf8_encode() 仅适用于 latin1。
我们正在使用多种编码从多个来源导入许多文档,我们需要一个完全干净的 UTF-8 输出。 我们不关心时间/资源问题。
感谢您的明智回答!
【问题讨论】:
-
也许尝试解决
iconv的问题会很有成效?另外,你试过mb_convert_encoding吗? -
每当我遇到这两个函数的问题时,我都会尝试使用 htmlentities,然后尝试使用 utf-8 编码的 html_entity_decode。这是一种解决方法,但也可能只适合您的情况。
-
@Jon :我们有一个函数可以做到这一点,但它很脏,我们很确定它不完整。我们需要 100% 测试和批准的东西。如果我们碰巧以某种方式改变了我们的修复,我们将不得不重新索引我们的数据。此外, mb_convert_encoding 需要一个输入字符集;我们正在寻找一种通用转换器。
-
@CiprianMocanu:所以你一个接一个地使用这两个函数?这种技术可以静默消除非法 UTF-8 字符吗?
-
@user1087972 它应该消除非法的 UTF-8 字符,如果没有,那么 preg_replace 从那个字符串中取出!
标签: php encoding utf-8 character-encoding solr