【发布时间】:2012-11-13 17:44:39
【问题描述】:
我不断收到愚蠢的invalid byte sequence for encoding "UTF8": 0x96 错误或其他错误。现在我已经确定它是我的服务器空间的问题。
问题是我从一个非常相似的数据库迁移而来,它也是 UTF-8。我在第一个数据库上测试了我的 PHP 脚本,它们可以工作,但在我要求的数据库上它们不能。一定是编码的问题,但我不确定是什么。
我的 PHP 查询在新数据库上失败并产生该错误。
PHP:
$name = $_POST["name"];
$type = $_POST["type"];
$contact = $_POST["contact"];
$address = $_POST["address"];
$postcode = $_POST["postcode"];
$phone = $_POST["phone"];
$description = $_POST["description"];
$location = $_POST["location"];
$conn = pg_connect(/*DATABASE CONNECTION DETAILS*/);
$res = pg_query("INSERT INTO address (organisation_type, contact_name, address, postcode, phone_number, description, location_to_town, organisation_name) VALUES ('$type', '$contact', '$address', '$postcode', '$phone', '$description', '$location', '$name')");
pg_close($conn);
我的意思是这是一个简单的 PHP 写入数据库函数,唯一奇怪的是一个 UTF-8 数据库工作而另一个不工作。有什么方法可以在命令行比较服务器/更改我的 PostGreSQL 服务器的配置?
感谢任何信息将不胜感激。把我的头发扯掉了!
【问题讨论】:
-
旁注:Jimmy O'Hara 不能注册吗?
-
抱歉我不明白你的问题?
-
@DanielD 尝试插入一个名为
Jimmy O'Hara的用户。它可能会出错,因为你没有转义引号。除非你启用了magic_quotes ini选项(顺便说一句,不推荐) .. -
@DanielD 请参阅xkcd.com/327,并考虑如果用户尝试使用这样的名称注册会发生什么。为避免此问题,请参阅php.net/manual/en/function.pg-prepare.php。
-
@DanielD Re Álvaro 的评论:您需要阅读kalzumeus.com/2010/06/17/…、php.net/manual/en/security.database.sql-injection.php、en.wikipedia.org/wiki/SQL_injection、bobby-tables.com。这是一个相关的答案 - 关于德尔福,但原理是一样的:stackoverflow.com/a/13171076/398670
标签: php sql postgresql utf-8