首页 > 解决方案 > 如何将 Joomla unicode 字符从数据库更改为 utf8 字符串?

问题描述

Joomla 将数据库表中的特殊字符保存为 unicode 字符。例如,在管理面板的表单字段中,我有单词wyższe,但在数据库中,这个单词被更改为wy\u017csze. 当我从数据库中选择这个值并作为 HTML 字符串回显时,这个词中仍然有坏字符。非常奇怪的是,管理面板中的单词有正确的字母,并且显示为wyższe. 为什么当我想通过组件 ( JFactory::getDbo();) 的 php 代码打印此值时,unicode 样式不想消失?

        $db = JFactory::getDbo();
        $query = $db->getQuery(true);

        $query->select($db->quoteName('profile_value'))
            ->from($db->quoteName('#__user_profiles'))
            ->where($db->quoteName('profile_key') . ' = "profile.wyksztalcenie"')
            ->where($db->quoteName('user_id') . '=' . (int) $id)
        ;

        $db->setQuery($query);
        $results = $db->loadResult();

        return $results;

在用户配置文件选项卡中编辑配置文件页面的管理面板中,输入文本字段中的单词具有正确的字符。但是当我试图从我的组件的同一列中获取一个值时,这个词仍然有那些 unicode 字符。

一切都与“用户配置文件”选项卡中的字段有关。即使您填写标准文本字段,例如City,单词也会以 unicode 字符保存在数据库中。当它从数据库加载到文本字段时被转换并且单词是正确的。当我使用 Joomla 标准查询(见上文)在我的组件的子页面上查看此值时,会出现问题。Word 仍以 Unicode 字符串形式打印。Joomla 将User Profile选项卡的文本字段中的值作为 unicode 保存到数据库中。为什么当我想通过标准 joomla sql 查询获取这些值时,这些值仍以 unicode 形式打印,而不像 Joomla 完成时那样打印?

重要:一件事。在数据库中,输入文本字段的值用引号保存,但User Profile在管理面板的编辑页面上,它们不带引号加载。我的 sql 查询用引号打印这些值。所以问题是。Joomla 安装的哪个文件负责在此选项卡中打印文本字段?

已解决:这些值用引号保存在数据库中,因为 Joomla 在保存时会将它们转换为json值。因此,如果您想打印那些不带引号和不带 unicode 字符的值,您应该return json_decode($results);改用return $results;.

标签: mysqlstringunicodejoomlauser-profile

解决方案


推荐阅读