【问题标题】:Postgresql php and bytesequence issuePostgresql php和字节序列问题
【发布时间】:2010-08-04 09:42:14
【问题描述】:

我已将 html 元标记设置为 uft8 也是 utf8 的形式字符集 为了确保我已经在有问题的字符串上运行了 php 函数 utf8_encode()

即使在这一切之后,我在通过 php 函数 pg_query 执行查询时遇到 postgres 错误。

然而,当我将查询复制并粘贴到命令行时,它执行得很好。

查询(或至少有问题的部分): 插入位置 (... alt_thorfare_name ... ) 值 (... 'BÓTHAR GHLEANN/SHEÁIN' ...);

错误: 查询失败:错误:用于编码 UTF8 的字节序列无效:0xd354 提示:如果字节序列与服务器期望的编码不匹配,也可能发生此错误,该编码由 client_encoding 控制

问题在于 O 和 A 的 fada(爱尔兰语的尖锐口音)。

我完全不知道下一步该做什么,甚至试图找到解决方案。 任何帮助表示赞赏

【问题讨论】:

  • 您应该删除utf8_encode,它可能会对字符进行双重编码。另外,我不知道 pg,但是 connection 是否也设置为 UTF-8?你检查过client_encoding吗?

标签: php postgresql


【解决方案1】:

出现该错误是因为您实际上并未将 UTF-8 数据传递给 pg_query

0xd354 实际上不是有效的 UTF-8 序列,它是“ÓT”的 ISO-8859-1 序列。见:

header("Content-type: text/plain");
$s = "ÓT";
$utf8 = mb_convert_encoding($s, "UTF-8", "HTML-ENTITIES");
$u = unpack("H*", $utf8);
echo "UTF-8 byte sequence: " . reset($u),"\n";
$iso8859 = mb_convert_encoding($s, "ISO-8859-1", "HTML-ENTITIES");
$u = unpack("H*", $iso8859);
echo "ISO-8859-1 byte sequence: " . reset($u),"\n";

给予

UTF-8 字节序列:c39354 ISO-8859-1 字节序列:d354

这样做:

  • 请勿使用utf8_encode(),除非您可能从某个地方(例如外部纯文本文件)获得 ASCII 数据。
  • 将您的 PHP 文件编码为 UTF-8 without BOM

【讨论】:

    【解决方案2】:

    为了确保我已经运行了 php 函数 utf8_encode() 违规字符串

    这就是问题所在,你不必将utf8编码为utf8,它已经是utf8了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-18
      • 2015-03-22
      • 1970-01-01
      • 2010-10-16
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      相关资源
      最近更新 更多