开发者

PDO utf8_encoding my text string twice in INSERT?

Relevent code:

$status = $db->run(
    "INSERT INTO user_wall (accountID, fromID, text, datetime) VALUES (:toID, :fromID, :text, '" . time() . "')",
    array(":toID" => $toID, ":fromID" => %accountID, ":text" => $text)
);

I am taking input text from javascript, throwing it in an AJAX call to handle it, which calls a function which includes these lines of code.

The text string in question is: "Türkçe Türkçe Türkçe!"

Upon investigating the database, the following value is saved "Türkçe Türkçe TÃÂ开发者_Go百科¼rkçe!", which is double utf8_encode'd.

When viewing the text by SELECTing it from the database, I get "Türkçe Türkçe Türkçe!", which is how they should be saved in the database in the first place.

As far as I know, I am not encoding the data as it is being prepared by PDO...


Encoding is a b*tch. You need to make sure it is as you expect it to be in several places:

  1. The HTML page with the Javascript. Set it to utf-8 with a meta tag like: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

  2. The connection to your database. Execute the query set names 'utf8' after connecting to the database (and before any other queries).

  3. Your database field. In MySQL it's called a collation set it to utf8_general_ci (ci stands for case-insensitive).

If you have these 3 your data should always be, and stay, utf-8 (unless you're doing encoding yourself).

For good measure, make sure your source code files are utf-8 as well. Windows typically defaults to iso.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜