【问题标题】:MediaWiki + latex => json_encode(): Invalid UTF-8 sequenceMediaWiki + latex => json_encode():无效的 UTF-8 序列
【发布时间】:2015-02-06 06:25:37
【问题描述】:

我刚刚在 Digital Ocean 上的全新 CentOS 7 droplet 上完成了 MediaWiki 的安装。一切似乎都很好,除了当我输入数学公式时,我收到以下错误消息:

A database query error has occurred. This may indicate a bug in the software.

在我的 Apache error_log 中,我看到以下内容:

[Sun Dec 07 13:35:13.131206 2014] [:error] [pid 20894] [client xxx.xxx.xxx.xxx:53015] PHP Warning:  json_encode(): Invalid UTF-8 sequence in argument in /var/www/mediawiki/includes/json/FormatJson.php on line 237, referer: https://wiki.*******.net/index.php?title=Test&action=edit

如果我从页面中删除数学公式,页面会毫无问题地保存在数据库中。我已按照此处给出的说明进行操作:

http://www.mediawiki.org/wiki/Extension:Math

我需要服务器端渲染才能使用一些自定义包以及我们通常添加到序言中的一堆包含文件。这将很难/不可能使用 MathJax 来完成。

完成的精确步骤:

  1. 通过yum安装httpd、mariadb mod_ssl。

  2. 下载最新的 mediawiki 并解压到 /var/www/mediawiki

  3. 在 mariadb for mediawiki 中创建用户和数据库

  4. 将使用此用户名安装的标准 mediawiki 安装脚本运行到创建的数据库中。

  5. 将生成的 LocalSettings.php 复制到 /var/www/mediawiki(此时网站正常运行)

  6. 通过 yum 安装了 texlive with extras 包。

  7. 通过 yum 安装 OCaml。

  8. 下载 Math 扩展并编译 texvc 和 texvccheck 二进制文件(它们位于默认位置)

  9. 在 LocalSettings.php 中添加了以下行:require_once "$IP/extensions/Math/Math.php";

  10. 此时将任何数学写入页面将导致按“保存页面”时出现上述错误。

有问题的代码如下:

// PHP escapes '/' to prevent breaking out of inline script blocks using '</script>',
// which is hardly useful when '<' and '>' are escaped (and inadequate), and such
// escaping negatively impacts the human readability of URLs and similar strings.
$options = JSON_UNESCAPED_SLASHES;
$options |= $pretty !== false ? JSON_PRETTY_PRINT : 0;
$options |= ( $escaping & self::UTF8_OK ) ? JSON_UNESCAPED_UNICODE : 0;
$options |= ( $escaping & self::XMLMETA_OK ) ? 0 : ( JSON_HEX_TAG | JSON_HEX_AMP );
$json = json_encode( $value, $options );
if ( $json === false ) {
    return false;
}

显然,数学代码将在结束选项卡中包含一个斜线。但是,对于任何与数学无关的标签,我没有在 error_log 中看到此警告。

【问题讨论】:

  • 您遵循了哪些说明? 您到底做了什么? 仅仅链接到包含教程的页面是不够的;您需要说明您实际做了哪些更改。
  • 除非它不是我的代码,所以我认为这是一个安装问题,而不是我需要修复的错误。我当然可以在他们的 Bugzilla 中提交一些内容。
  • 我知道媒体 wiki 的数学系统最近发生了相当大的工作量,它可能无法在所有系统上进行完全测试。一个激进的解决方案可能是使用大约 6 个月前的先前版本。如果 MaxSem 的答案不起作用,您可以尝试更改数学偏好。

标签: mediawiki


【解决方案1】:

json_encode 不相关。您只需要按照Math installation instructions 并从shell 运行php maintenance/update.php 来为这个扩展创建一个数据库表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多