6

我这辈子都想不通。

我有一个查询可以提取页面上元素的翻译。因此,该页面上可以出现任意数量的 15 种语言。当我开始添加像瑞典语这样的语言时,任何具有符号的语言都会ö导致整个字段返回空字符串。

我已经验证了表上的编码,它声称它正在使用UTF-8,但看到这不起作用我很困惑。

这是我正在使用的查询:

SELECT
   form.form_id,
   elem.elem_type,
   elem.elem_name,
   elem.elem_format,
   elem.elem_required,
   trans.trans_label,`
   trans.trans_description,
   trans.trans_defaultValue,
   trans.trans_other,
   elem.elem_advancedcommand
FROM
   events_form form
LEFT JOIN
   events_form_elements elem
ON
   form.event_id = elem.event_id
INNER JOIN
   events_form_translations trans
ON
   elem.elem_id = trans.elem_id
INNER JOIN
   events_form_languages lang
ON
   trans.lang_id = lang.lang_id
WHERE 
   form.form_id = '{$formid}' AND lang.language = '{$language}'
ORDER BY
   elem.elem_sortorder

现在我尝试做类似的事情:

CONVERT(CAST(trans.trans_description as BINARY) USING latin1) as trans_description,

强制它隐藏编码,但这根本不会产生结果。

在我得到结果后,它立即被 json_encoded 并返回给用户(Ajax 请求)。我不认为这是 json_encode 做一个print_r输出数组会产生同样的问题。

另外.. 最后,我正在构建的系统正在使用 xPDO,所以我也不太确定这是否是问题所在。

编辑:似乎 PHP 正在返回一个正确的值或至少一个值,例如这里是一个print_r转储:

[trans_label] => Ditt f�rnamn?
[trans_description] => 
[trans_defaultValue] => First Name

因此,似乎当我的 json_encode 触及该字符串时,它会将字符串变为空。

4

4 回答 4

10

您的 PDO 连接字符串应指定编码。例如:

mysql:host=localhost;port=3306;dbname=test;charset=utf8

这控制了数据库驱动程序在返回结果时将使用的编码,以及驱动程序假定您的查询所在的编码。如果您不指定它,将使用默认编码。通常默认为latin1.

您可以通过在 PHP 中打印数据的十六进制表示来确认这一点bin2hex: förnamn 中的 ö 被返回为f6. 如果文本以 UTF-8 编码,您将获得c3b6.

于 2012-07-16T16:21:03.017 回答
3

您对网页的编码只字未提。
您的页面部分是否有该行<head>强制编码为 UTF-8?

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
于 2012-07-16T16:35:40.603 回答
1

我在将字母编码为我的母语冰岛语时遇到了问题,但我找到了所有utf8字母的相互解决方案。

right after mysql_select_db and before mysql_query insert the following:

 mysql_query("SET character_set_connection=utf8, 
 character_set_results=utf8, 
 character_set_client=utf8", $con);

Where $con is the connection to mysql

Happy coding..

于 2015-03-22T10:11:12.480 回答
0

由于数据类型不兼容,转换后您的答案为空。但是在页面上显示欧洲或阿拉伯字符非常简单。我对阿拉伯语也有同样的问题,但经过几次实验后,它现在可以正常工作了。

如果要在页面上显示那些欧洲字符(jsp、php、html),首先将页面编码设置为 UTF-8,例如:-

pageEncoding="utf-8"

而且您还需要对 utf-8 字符的数据库连接类进行一些更改

使用下面的代码: -

jdbc:mysql:your_ipaddress":3306/"+db+"?requireSSL=false&useUnicode=true&characterEncoding=UTF-8

希望它会帮助你。

于 2012-07-23T07:52:21.420 回答