得到�何时使用 gettext 和 smarty 处理特殊字符

发布于 2024-09-15 14:38:19 字数 160 浏览 7 评论 0原文

我在 gettext 中使用 $encoding = 'utf-8'; ,并在我的 html 代码中设置了 。我还在我的 .po 文件中设置了 utf-8,但当我写 æøå 时,我仍然得到 � !有什么问题吗?

I am using $encoding = 'utf-8'; in gettext and in my html code i have set <meta charset="utf-8">. I have also set utf-8 in my .po files, but I still get � when I write æøå! What can be wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

在风中等你 2024-09-22 14:38:23

让我们看看您提到的值在字节级别的情况如何。

我复制了您问题中的 æøå 和您标题中的 ï¿ ï¿½ 的原因是我必须使用 Windows 控制台应用程序来获取您问题的标题,其代码页是 Windows 1252(从浏览器复制给我 Unicode 字符“替换字符”(U+FFFD)) 。

在以 UTF-8 编码的脚本中,给出:

<?php
$s = 'æøå';
$s2 = '�';

echo "s iso-8859-1 ", @reset(unpack("H*", mb_convert_encoding($s, "ISO-8859-1", "UTF-8"))), "\n";
echo "s2 win-1252  ", @reset(unpack("H*", mb_convert_encoding($s, "WINDOWS-1252", "UTF-8"))), "\n";
s iso-8859-1 e6f8e5
s2 win-1252  e6f8e5

因此字节表示匹配。这里的问题是,当您编写 æøå 时:

  • 您正在使用 ISO-8859-1 而不是 UTF-8 编写它。检查你的文本编辑器。
  • 该值正在从 UTF-8 转换为 ISO-8859-1(不太可能)

Let's see how the values you mention are at the byte level.

I copied the æøå from your question and � from your title. The reason for � is that I had to use a Windows console application to fetch the title of your question and its codepage was Windows 1252 (copying from the browser gave me Unicode Character 'REPLACEMENT CHARACTER' (U+FFFD)).

In a script encoded in UTF-8, this gives:

<?php
$s = 'æøå';
$s2 = '�';

echo "s iso-8859-1 ", @reset(unpack("H*", mb_convert_encoding($s, "ISO-8859-1", "UTF-8"))), "\n";
echo "s2 win-1252  ", @reset(unpack("H*", mb_convert_encoding($s, "WINDOWS-1252", "UTF-8"))), "\n";
s iso-8859-1 e6f8e5
s2 win-1252  e6f8e5

So the byte representation matches. The problem here is that when you write æøå either:

  • You're writing it in ISO-8859-1, instead of UTF-8. Check your text editor.
  • The value is being converted from UTF-8 to ISO-8859-1 (unlikely)
高冷爸爸 2024-09-22 14:38:23

您需要设置这个

bind_textdomain_codeset($domain, "UTF-8");

否则你会得到 � 字符

You need to set this

bind_textdomain_codeset($domain, "UTF-8");

Otherwise you will get the � character

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文