0

我有 2 个字符串"CHILDREN’S"

其中一个被保存到 MySQL 数据库中(实际上它是一个页面标题,来自 WordPress)。另一个是数据库中字符串的复制和粘贴版本。

当我var_dump在 2 个字符串 ( var_dump("CHILDREN’S"); var_dump($string)) 上运行时,复制粘贴的字符串是string(12) "CHILDREN’S",从数据库中显示的字符串是string(16) "CHILDREN’S". 我假设这是一个 UTF-8 问题。

有人可以解释为什么相同的字符串实际上并不相同。

4

4 回答 4

1

“儿童”是十个字符。要使其变为 12,“'”必须成为 UTF-8 代码点,这没关系。

但除非第二个引号真的是’. 除 HTML 实体外,我所知道的没有七字节编码。

如果是这样,那么html_entity_decode可能是你的朋友。

于 2012-09-13T12:11:35.097 回答
0
于 2012-09-13T12:15:33.660 回答
0

To see how the strings really differ, you could write the hex out of every string.

For example:

$s1 = 'CHILDREN\'S';

for($i=0; $i<strlen($s1); $i++)
  echo '0x' . bin2hex(substr($s1, $i, 1)) . ' ';

This gives 0x43 0x48 0x49 0x4c 0x44 0x52 0x45 0x4e 0x27 0x53 as a result. Try the same with the string from the database, and see where it differs.

于 2012-09-13T12:16:36.627 回答
0

这可能是一个编码问题,在这种情况下,您需要检查数据库列的编码并确保它是您所期望的。

或者,您可能在数据库字符串中有几个不可打印的字符——可能是您从数据库工具中复制/粘贴了某种讨厌的字符。

于 2012-09-13T12:10:50.900 回答