You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 12如何通过中间件将站点输出编码为iso-8859-1?

在TYPO3 12中实现ISO-8859-1编码输出

方法一:自定义中间件获取并转换响应内容

  1. 创建中间件类
    在你的扩展的Classes/Middleware目录下创建CharsetConverterMiddleware.php,代码如下:
<?php

declare(strict_types=1);

namespace YourVendor\YourExtension\Middleware;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;
use TYPO3\CMS\Core\Http\HtmlResponse;

class CharsetConverterMiddleware implements MiddlewareInterface
{
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
    {
        // 先让后续中间件生成完整响应
        $response = $handler->handle($request);
        
        // 仅处理HTML类型的响应
        if ($response instanceof HtmlResponse) {
            // 获取原始页面内容
            $content = $response->getBody()->getContents();
            
            // 将UTF-8编码内容转换为ISO-8859-1
            $convertedContent = mb_convert_encoding($content, 'ISO-8859-1', 'UTF-8');
            
            // 生成新的响应,替换内容并设置正确的编码头
            return new HtmlResponse(
                $convertedContent,
                $response->getStatusCode(),
                array_merge(
                    $response->getHeaders(),
                    ['Content-Type' => ['text/html; charset=ISO-8859-1']]
                )
            );
        }
        
        // 非HTML响应直接返回原内容
        return $response;
    }
}
  1. 注册中间件
    在扩展的Configuration/RequestMiddlewares.php中注册该中间件,注意要放在TYPO3默认HTML响应生成之后:
<?php

return [
    'frontend' => [
        'your-vendor/charset-converter' => [
            'target' => \YourVendor\YourExtension\Middleware\CharsetConverterMiddleware::class,
            'after' => [
                'typo3/cms-frontend/content-length-headers',
            ],
        ],
    ],
];

方法二:配合Typoscript补充编码元标签

虽然config.metaCharset被移除,可在站点的setup.typoscript中手动添加编码声明,确保页面头部编码与实际输出一致:

page.meta.charset = ISO-8859-1
page.meta.charset.attribute = charset

注意事项

  • 确保站点内容无ISO-8859-1无法兼容的特殊字符,否则转换时会出现乱码;可在mb_convert_encoding中添加第四个参数指定错误处理,比如mb_convert_encoding($content, 'ISO-8859-1', 'UTF-8', '?')用问号替换无法转换的字符。
  • 中间件注册顺序必须正确,要在TYPO3完成HTML内容生成后执行,才能获取到完整的页面内容。

内容的提问来源于stack exchange,提问作者lisardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 23:32:35