无法在PHP中编码字符(字符串值不正确)

时间:2012-06-11 12:05:20

标签: php mysql

我希望在将丹麦语字符发送到数据库之前对其进行编码。

我尝试将此功能应用于他们:

private function process_array_elements(&$element){
   $element = utf8_encode($element);
   $element = strip_tags(  $element );
   $element = strtolower ( trim ( $element )  );
   $element = mysql_real_escape_string($element);
   return $element;
}

像这样:

$this->check_line_two = $this->process_array_elements($e);

现在,每当我尝试将字符串发送到数据库时:

mysql_query("SET NAMES 'utf8'");
$query="INSERT INTO  result_scanned
          SET line_one= '$this->check_line_one',
              line_two='$this->check_line_two',
              line_three='$this->check_line_three',
              advert_id='$this->advert_id',
              scanned='$this->scan_result'";

我明白了:

 Incorrect string value: '\xE3\x83\xE2\xB8r ...' for column 'line_three' at row 1

表中字段的数据类型是UTF-8(utf8_unicode_ci),所以我必须使用相同的

对我的字符串进行编码

此主题与我的问题有关:Detect encoding and make everything UTF-8

但是,在将任何字符插入数据库之前,我需要知道如何将任何字符编码为UTF-8,否则,我会收到上述错误。我想在将它们放入数据库之前,首先要确定我接收的是哪种字符。

2 个答案:

答案 0 :(得分:4)

utf8_unicode_ci是排序规则,您还需要将字符集设置为utf8

CREATE TABLE someTable DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci;

为了更好地衡量,使用PHP连接MySQL时,请确保所有内容都是UTF-8:

mysql_connect ("localhost", "DB_USER", "DB_PASSWORD") or die (mysql_error());
mysql_select_db ("DATABASE_NAME") or die (mysql_error());

mysql_query("SET character_set_client=utf8"); 
mysql_query("SET character_set_connection=utf8"); 
mysql_query("SET character_set_database=utf8"); 
mysql_query("SET character_set_results=utf8"); 
mysql_query("SET character_set_server=utf8"); 
mysql_query("SET NAMES 'utf8'");

这就是我在我运行的Hebrew gibberish translation网站上的连接方式,它处理了我或用户所投入的所有内容。

答案 1 :(得分:1)

Incorrect string value: '\xE3\x83\xE2\xB8r ...' for column

我使用strtolower

时才会收到此错误消息

我的数据库和整理都是UTF-8,并且没有任何问题。我有一个语言数据库表,可以处理日语,俄语,中文等没有任何问题。当我尝试strtolower

时,只会弹出此错误

使用单代码字符时需要使用PHP的mb_strtolower