【问题标题】:Problem with PHP localeconv() - Maybe UTF-8PHP localeconv() 的问题 - 也许是 UTF-8
【发布时间】:2010-05-14 17:17:15
【问题描述】:

我在 PHP 中遇到了 localeconv() 的问题。我使用的是 Windows PC。

我使用setLocale(LC_ALL, 'fra_fra') 函数将我的语言环境设置为法国。然后我将localeconv() 函数调用为一个变量。当我输出那个变量时,下面是我得到的。


Array
(
    [decimal_point] => ,
    [thousands_sep] => �
    [int_curr_symbol] => EUR
    [currency_symbol] => �
    [mon_decimal_point] => ,
    [mon_thousands_sep] => �
    [positive_sign] => 
    [negative_sign] => -
    [int_frac_digits] => 2
    [frac_digits] => 2
    [p_cs_precedes] => 0
    [p_sep_by_space] => 1
    [n_cs_precedes] => 0
    [n_sep_by_space] => 1
    [p_sign_posn] => 1
    [n_sign_posn] => 1
    [grouping] => Array
        (
            [0] => 3
        )

    [mon_grouping] => Array
        (
            [0] => 3
        )

)

我不确定这是否是 UTF-8 显示问题。我做了以下事情:

  1. 将 PHP.ini 中的 default_charset 设置为 UTF-8
  2. 我页面上的 Content-type 是 UTF-8
  3. 我也在标题中调用了相同的名称,即header('Content-type: text/html; charset=utf-8')
  4. 我正在使用 firefox 并在那里更改了字符集,但仍然没有运气
  5. 我还用AddDefaultCharset 更新了我的 http.conf 文件,但仍然没有雪茄

我完全被难住了,不知道下一步该怎么做。

有人可以帮忙吗?

谢谢。

【问题讨论】:

  • 试试“fr_FR”或“fr_FR.UTF-8”...

标签: php utf-8


【解决方案1】:

我认为,您的输出不是 UTF-8。尝试在大多数 *nix 系统上使用 UTF-8 语言环境,例如 fr_fr.UTF-8fr_fr.utf8

顺便问一下:你确定fra_fra-locale 吗?法语不应该是fr_fr吗?

【讨论】:

  • fr_fr 在 Windows 机器上不起作用。这在此处的 setlocale() 文档中有所说明:php.net/manual/en/function.setlocale.php。 fra_fra 确实有效,但输出是我无法理解的,我已将所有我知道的可能设置为 utf-8。
  • 您使用的是 Windows? UTF-8 是不行的。请在此处查看我的答案:stackoverflow.com/questions/120334/…
  • 我假设输出是 Windows-1252、ISO-8859-1 或 ISO-8859-15。也许您可以使用iconvmb_convert_encoding 将其转换为UTF-8。
  • 我让它与以下内容一起工作: iconv('Windows-1252', 'UTF-8', $locale_conv_arr['currency_symbol']) 即假设 $locale_conv_arr 代表我定义的数组问题。我现在正在做一个jig。谢谢斯特凡。
  • 这在 Linux 上对我有用。实际问题是未安装非 UFT-8 语言环境。我本可以安装它们,但我只是简单地将“.UTF-8”附加到选择的任何语言环境中。
【解决方案2】:

我终于让它工作了,即显示正确的字符。

只需执行以下操作(请注意,这是针对 Windows 的):

iconv('Windows-1252', 'UTF-8', $locale_conv_arr['currency_symbol']);

$locale_conv_arr 代表我之前在问题中定义的数组。

感谢 Stefan Gehrig 的指导。

干杯。

【讨论】:

    【解决方案3】:

    有一个名为“intl”的 PHP 扩展,它在不使用操作系统函数的情况下提供区域信息:它只使用 UTF-8,避免了这个问题。

    http://www.php.net/manual/en/book.intl.php

    因为这是我在寻求帮助时出现的 SO 问题,所以我想确保有一个链接...

    【讨论】:

      猜你喜欢
      • 2011-11-30
      • 2011-06-05
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 2015-12-06
      • 2011-06-16
      • 1970-01-01
      相关资源
      最近更新 更多