Pet*_*ter 6 mysql utf-8 character-encoding
我无法想象我的生活.
我有一个查询,可以在页面上提取元素的翻译.因此,该页面上可以显示任意数量的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
Run Code Online (Sandbox Code Playgroud)
现在我尝试做类似的事情:
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
Run Code Online (Sandbox Code Playgroud)
因此,当我的json_encode触及该字符串时,它似乎将字符串转换为null.
Jon*_*oni 10
您的PDO连接字符串应指定编码.例如:
mysql:host=localhost;port=3306;dbname=test;charset=utf8
Run Code Online (Sandbox Code Playgroud)
这将控制数据库驱动程序在返回结果时将使用的编码,以及驱动程序假定您的查询所在的编码.如果未指定,则将使用默认编码.通常默认是latin1.
您可以通过bin2hex在PHP中打印数据的十六进制表示来确认这一点:förnamn中的ö返回为f6.如果文本以UTF-8编码,您将获得c3b6.
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |