Postgresql php和bytesequence问题

时间:2010-08-04 09:42:15

标签: php postgresql

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

即使在所有这些之后我通过php函数pg_query执行查询时出现postgres错误。

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

查询(或至少是违规部分): 插入INTO位置 (... alt_thorfare_name ...)VALUES(...'BÓTHARGHLEANN/SHEÁIN'...);

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

问题是O和A上的fada(来自爱尔兰语的强烈口音)。

即使尝试寻找解决方案,我仍然完全坚持下一步该做什么。 任何帮助表示赞赏

2 个答案:

答案 0 :(得分:2)

发生该错误是因为您实际上没有将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 byte sequence: c39354
ISO-8859-1 byte sequence: d354

这样做:

  • 除非您从某处获得ASCII数据(例如,外部纯文本文件),否则请勿使用utf8_encode()
  • 将您的PHP文件编码为 UTF-8无BOM

答案 1 :(得分:1)

  

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

这是出错的地方,你不必将utf8编码为utf8,它已经是utf8了。