2015-02-07 84 views
2

我有两个字符串,在UTF-8中看起来完全相同。utf8_decode():UTF-8中的相同字符串返回不同的结果(PHP)

$string1 = "histórico"; 
$string2 = "histórico"; 

,但是当我将它们转换为ISO-8859-1,(它doesn't介意我用utf8_decodeiconvmb_convert_encoding)我得到不同的输出为他们:

  • 的字符串1转换到histoÌrico
  • 的字符串2转换成histórico(也就是,其实我所期待的两个字符串)

任何想法?

在此先感谢!

+0

<? $ cadena1 =“histoïrico”; $ cadena2 =“histórico”; echo utf8_decode($ cadena1); echo utf8_decode($ cadena2); ?> – user2261050 2015-02-07 11:41:34

+0

为什么你“期望”“histórico”...? – deceze 2015-02-07 11:45:46

+0

以及我必须使用ISO-8859-1字符串,他们应该看起来一样...但他们不(事实上,如果我在屏幕上打印他们只有第二个将显示ó字符) – user2261050 2015-02-07 11:54:46

回答

2

two ways of creating the character ó in Unicode

  • 作为单个字符:U+00F3
  • 作为一个小写o,其次是结合重音符号´U+006F U+0301

渲染后,他们看起来完全相同。

+0

我怎样才能将U + 006F U + 0301字符转换为ISO-8859-1?恐怕它没有对应关系(并且与其他许多字符一样) – user2261050 2015-02-07 11:49:15

+0

我不熟悉PHP处理Unicode字符串的方式,但是您必须将字符串*编码为8859-1,而不是*解码*它。如果PHP的编码函数无法处理分解的表单,那么可能需要首先[标准化](http://php.net/manual/de/class.normalizer.php)该字符串。对不起,没有更多的帮助 - 我可以向你展示Python代码需要的两行代码,但就PHP而言,我是一个完整的noob ... – 2015-02-07 11:53:14

+0

如果我“编码”为8859-1,使用iconv()或mb_convert_encoding()我得到相同的结果... – user2261050 2015-02-07 11:56:27

相关问题