我无法想象我的生活。
我有一个查询可以提取页面上元素的翻译。因此,该页面上可以显示任意数量的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 Request)。我不认为这是json_encode,因为输出数组print_r
会产生同样的问题。
另外..最后,我正在构建的系统正在使用xPDO,所以我不太确定这是否也是问题。
编辑:
似乎PHP正在返回一个正确的值,或者至少是一个值,例如这里是一个print_r
转储:
[trans_label] => Ditt f�rnamn?
[trans_description] =>
[trans_defaultValue] => First Name
所以看来当我的json_encode触及该字符串时,它将字符串变为null。
答案 0 :(得分:10)
您的PDO连接字符串应指定编码。例如:
mysql:host=localhost;port=3306;dbname=test;charset=utf8
它控制数据库驱动程序在返回结果时将使用的编码,以及驱动程序假定您的查询所在的编码。如果未指定,则默认编码为用过的。通常默认值为latin1
。
您可以通过在PHP中使用bin2hex
打印数据的十六进制表示来确认这一点:förnamn中的ö返回为f6
。如果文本是以UTF-8编码的,那么您将获得c3b6
。
答案 1 :(得分:3)
您对网页的编码一无所知
您是否在页面的<head>
部分中有该行以强制编码为UTF-8?
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
答案 2 :(得分:1)
我遇到了将字母转换为我的母语 Icelandic 的问题,但我找到了所有 utf8 字母的相互解决方案。
在 mysql_select_db 之后,在 mysql_query 之前插入以下内容:
mysql_query("SET character_set_connection=utf8,
character_set_results=utf8,
character_set_client=utf8", $con);
其中$ con是与mysql的连接
快乐编码..
答案 3 :(得分:0)
由于数据类型不兼容,转换后您的答案为空。但在页面上显示欧洲或阿拉伯字符非常简单。我遇到了与阿拉伯语相同的问题,但经过一些实验后,它的工作正常。
如果你想在页面上显示那些欧洲字符(jsp,php,html),首先将页面编码设置为UTF-8,如: -
的pageEncoding = “UTF-8”
您还需要对utf-8字符的数据库连接类进行一些更改
使用以下代码: -
JDBC:MySQL的:your_ipaddress “:3306 /”?+分贝+“requireSSL =假安培;了useUnicode =真安培;的characterEncoding = UTF-8
希望它会对你有所帮助。