我目前正在通过webservice从Android向PHP中的一个函数发送信息,该函数将该数据发送到数据库。
虽然,如果我的名字中有重音符号,我会从PHP收到此错误:
字符串值不正确:'\ xE1 \ xE1mos ...'列为'firstname' 第1行
名字可以有重音符号,例如: António,João等。
在PHP函数中,在插入数据库之前,我没有成功:
$db->set_charset('utf8');
$query = $db->prepare("SET NAMES 'utf8';");
$query->execute();
如果我发送没有任何重音的数据,该服务将完美运行。
修改:使用utf8_encode(variable).
答案 0 :(得分:2)
在Android中向WebServices发送数据时,请尝试对字符串进行URL编码,然后再将其放入URL /表单数据中,例如:
// ...
String encodedName = URLEncoder.encode(name, Http.UTF_8);
// use encodedName instead of name to pass as parameters to the webservices
在PHP方面,在使用参数之前,请使用urldecode函数。
$name = urldecode ($_GET['my_param']);
继续使用数据库中的编码。另外,检查您的表是否已使用UTF_8合并创建。
答案 1 :(得分:1)
仅指定连接的编码是不够的。您需要将表和数据库的字符集更改为utf-8。
因此,请执行以下操作
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE tbl_name CONVERT TO CHARACTER SET "utf-8" COLLATE utf8_general_ci;