TYPO3 RTE:保存 mathematical/greek 个符号不起作用

TYPO3 RTE: Saving mathematical/greek symbols doesn't work

我需要在 RTE 中和稍后在前端显示一些 mathematical/greek 符号。通过 copy/paste 或 "Insert characters" 选项插入它们效果很好,但是一旦我保存文本,插入的符号就会被问号替换,T3 会抛出以下错误:

1:table"tt_content"中记录56的这些字段没有正确保存:bodytext!由于数据库的类型转换,这些值可能已更改。

我认为 T3 或我的数据库的字符集有问题,但我不知道从哪里开始查找。

在我的 7.6.8 上测试过,似乎工作正常。当我登录 mysql 和 运行 这个查询时:

SELECT default_character_set_name FROM information_schema.SCHEMATA
    WHERE schema_name = "7_6_local_typo3_org";

(7_6_local_typo3_org 是数据库名)它returns:

+----------------------------+
| default_character_set_name |
+----------------------------+
| utf8                       |
+----------------------------+
1 row in set (0.00 sec)

还有整理:

SELECT default_collation_name FROM information_schema.SCHEMATA
    WHERE schema_name = "7_6_local_typo3_org";
+------------------------+
| default_collation_name |
+------------------------+
| utf8_general_ci        |
+------------------------+
1 row in set (0.00 sec)

然后我的my.cnf(mysql配置文件):

character-set-server = utf8
collation-server = utf8_general_ci

将带有 UTF 图标的 HTML 粘贴到 TYPO3-8 中的 Raw-HTML 内容元素时出现类似问题。7.x 但是当我对符号进行编码时它会起作用,例如:

<span class="menuicon">&#8986;</span>

错误消息的可能原因

1: These fields of record X in table "tt_content" have not been saved correctly: bodytext! The values might have changed due to type casting of the database.

在 TYPO3 安装中(示例安装版本:10.4.20)可以是

  • 此 TYPO3 安装的 MySQL/MariaDB table 使用 inappropriate/outdated 字符集 and/or 归类(步骤 1下面)。
  • 此 TYPO3 安装尚未配置为对数据库使用 utf8mb4(下面的步骤 2)。

TYPO3 supports utf8mb4 since at least version 9.5。在 CKEditor bodytext.

中,它提供了适当的 Unicode 支持,包括表情符号、数学符号和希腊字母(例如⌚∰β)

我通过以下方式将我的 TYPO3 安装的数据库和配置迁移到 utf8mb4,摆脱了上述错误消息并正确保存和显示 Unicode 多字节字符。

确保首先在测试环境中应用这些迁移,然后在生产系统上应用这些迁移之前检查现有内容并测试通常的内容编辑场景,以确保 MySQL/MariaDB 在字符集之间正确转换并且没有数据丢失(截断)。

第 1 步

更新 TYPO3 数据库 tables 以使用 utf8mb4 作为字符集并使用 utf8mb4_unicode_ci 作为排序规则。

以下 bash 单行循环遍历数据库 typo3 中的所有 table 并应用这些更新。它假定 MySQL/MariaDB root 权限、无密码套接字连接和名为 typo3 的 TYPO3 数据库(table_schema)。相应地进行调整。测试成功于

  • Debian 11 MariaDB 服务器 (10.5.12-MariaDB-0+deb11u1)
  • Ubuntu 20.04 LTS MySQL 服务器 (8.0.27-0ubuntu0.20.04.1)
for tbl in $(mysql --disable-column-names --batch -e 'select distinct TABLE_NAME from information_schema.tables where table_schema="typo3" and table_type="BASE TABLE";'); do echo "updating table $tbl" && mysql -e "ALTER TABLE typo3.${tbl} CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"; done

确保在此转换期间(从“较小”​​编码到每个字符最多四个字节的 utf8mb4 编码)没有(字符串)数据得到 lost/truncated、MySQL/MariaDB automatically adapts a text/string column's datatype to a larger text/string datatype, e.g. from TEXT to MEDIUMTEXT.

要将某些 TYPO3(扩展名)table 的列恢复为其指定的数据类型,请访问 TYPO3 后端 -> 维护 -> 分析数据库结构。此工具将允许恢复这些列的原始(较小)数据类型。这可能会导致数据截断。我不确定 TYPO3 是否会在实际发生截断时发出警告,尽管假设 TYPO3(扩展名)开发人员在 specifying/designing 列的数据类型和用户提供的时考虑了 utf8mb4特定数据库单元格的内容不是太大,不应发生截断 (overview of text/string datatype sizes)。

第 2 步

配置 TYPO3 以使用 utf8mb4。例如,当利用 typo3conf/AdditionalConfiguration.php 时,在 AdditionalConfiguration.php 中具有以下配置:

// ...

$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['charset'] = 'utf8mb4';
$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['tableoptions']['charset'] = 'utf8mb4';
$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['tableoptions']['collate'] = 'utf8mb4_unicode_ci';

// ...