<小时/> 当插入某些日文字符时,例如“お”(或那些想知道的“O”),它将作为“ず”(或“Zu”)插入数据库。还有更多的角色也会被改造,但我忘记了(我清理了数据库以查看某些解决方案是否有效)。
UTF-8
的所有内容都设置为UTF-8
。我已将以下内容设置为UTF-8
:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
header('Content-Type: text/html; charset=utf-8');
japanese_words
:ALTER TABLE japanese_words CONVERT TO CHARACTER SET utf8;
$db = new PDO('mysql:host=localhost;dbname=japanese;charset=utf8', '****', '****');
$db->exec("set names utf8");
指定日语单词在PHP中有效。我可以在我的网页中转储并定期显示日语单词。这意味着我的HTML和PHP设置正确。因此在将其插入数据库之前没有错误。
当我在数据库中手动插入日语单词时,它可以工作。
当我尝试使用PDO
将其插入数据库时,字符会被“转换”。
尝试显示生成的查询PDO
不起作用。我得到带有bound参数的查询,而不是实际的单词。
add_word.php
(一切正常):
$japanese_word = $_POST['japanese_word'];
$dutch_word = $_POST['dutch_word'];
$word = new Word();
$word->setDutchWord($dutch_word);
$word->setJapaneseWord($japanese_word);
$wordDAO = new WordDAO($db);
$success = $wordDAO->addWord($word);
WordDAO
方法,我认为问题是(或者在那里和实际的MySQL数据库之间):
$query = "insert into `japanese_words` (`word`) values(:word)";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':word', strtolower($word->getJapaneseWord()));
$stmt->execute();
$japanese_word_id = $this->db->lastInsertId();
答案 0 :(得分:3)
问题是我在strtolower()
中使用bindParam
。这改变了日语单词的值。将代码更改为以下内容:
$query = "insert into `japanese_words` (`word`) values(:word)";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':word', $word->getJapaneseWord());
$stmt->execute();
$japanese_word_id = $this->db->lastInsertId();
该死的我的公然副本/粘贴(当然我在发布问题时就发现了)。
答案 1 :(得分:1)
PDO
mb_internal_encoding('UTF-8');
$dbh = new PDO("mysql:host=localhost;dbname=japanese;charset=utf8");
$dbh->exec("set names utf8");
$query = "insert into `japanese_words` (`word`) values(:word)";
$stmt = $this->db->prepare($query);
// use mb_* function for japanese string
$stmt->bindParam(':word', mb_strtolower($word->getJapaneseWord()));
$stmt->execute();
$japanese_word_id = $this->db->lastInsertId();
更改数据库和表的字符集和整理
ALTER DATABASE japanese CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE japanese_words CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
设置页面的字符集
<?php
ini_set("default_charset", "UTF-8");
header('Content-type: text/html; charset=UTF-8');
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
您可能必须检查您的文件是否使用正确的字符集保存!