smarty 在 php 7.2 和德语变音符号上替换 ans ISO-8859-1 的问题

Posted

技术标签:

【中文标题】smarty 在 php 7.2 和德语变音符号上替换 ans ISO-8859-1 的问题【英文标题】:Problem with smarty replace ans ISO-8859-1 on php 7.2 and German Umlauts 【发布时间】:2019-09-28 06:34:52 【问题描述】:

我的模板中有一个替换功能,没什么特别的。

$description:replace:'http://www.youtube':'https://www.youtube'

$description 可以包含德语变音符号和 ISO-8859-1 字符。在 php

同样适用于 php

assign var="title" value=mb_convert_encoding($item->title, "ISO-8859-1", "UTF-8")
$title|replace:" ? ":" - "

为什么 smarty 在高于 7.0 的 php 上用 Umlauts 和 ISO-8859-1 字符替换字符串有问题?

【问题讨论】:

你用的是什么smarty版本?也尝试在 .php 中分配变量标题,然后将其分配给您的模板文件,看看会发生什么 我使用的是 3.1.31。好的,我试试看。 @Aaron 当我在 php 中分配变量时,它可以工作。但现在问题出在哪里? 我不是一个聪明的专家,也不知道它是如何调用 php 函数的。技术上应该没有问题。您可以尝试仅打印变量标题而不使用替换功能吗?我认为语法有问题。 【参考方案1】:

这在技术上不是一个答案,但我需要比评论支持的更多功能。

调试此类问题的一种方法是在库代码中插入调试消息。我将从modifier.replace.php 开始,它决定调用Smarty 自己的mb_str_replace 或本地的、非多字节安全的str_replace。该决定基于函数 mb_get_info 的存在,我认为这归结为您是否将 mbstring 支持编译到 PHP 中(我很确定您这样做)。

此外,我会查看mb_str_replace 中的basecase,看看它接收到什么参数以及返回什么。

祝你好运!

【讨论】:

以上是关于smarty 在 php 7.2 和德语变音符号上替换 ans ISO-8859-1 的问题的主要内容,如果未能解决你的问题,请参考以下文章

带有德语变音符号的 JSON Jackson + HTTPClient

如何在列表中打印德语变音符号?

debezium 服务器中的德语变音符号

带有德语变音符号的 iOS 上的 FacebookDisplayName

带有德语变音符号的 NSJSONSerialization 异常

CakePHP 2.1:德语变音符号的 Sluggable 行为