PHP编码 - 格式化葡萄牙语-BR中的cedilla不起作用

时间:2015-03-09 14:10:58

标签: php html utf-8 character-encoding

我正面临与葡萄牙语-BR中的charset格式化单词相关的问题,其中包含 cedilla 。 当我用setlocale enconding将utf-8设置为'portuguese-brazil'时,PHP似乎不理解它。
如图所示,我尝试将当前月份的英语转换为葡萄牙语:

enter image description here

正如我们所看到的,上面的值应该向最终用户显示Março(这意味着 March 英文)。 我尝试使用葡萄牙语和这里的Stack Overflow进行导航,但这些问题和解决方案都不适用于我。

在我的HTML文件中,我的meta标记定义如下:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

它自己保存的文件也按UTF-8 w/o BOM格式保存。

本月显示的代码段:

<div id="ow-marketplace" class="col-xs-12 col-sm-12 col-md-12 table-responsive">
    <?php 
        setlocale( LC_ALL, 'pt_BR', 'pt_BR.utf-8', 'portuguese-brazilian' );
        date_default_timezone_set( 'America/Sao_Paulo' );
        $data = strftime( '%B/%y', strtotime('today'));
        echo "<h4 class=\"page-header\">Vendas Atuais do mês de ". ucfirst($data) ."</h4>";
    ?>
<div class="box-content">

我不知道如何解决这个问题,但我认为charset似乎没有按预期工作 任何人都可以帮我这个吗?

如果我需要发布任何进一步的信息,请告诉我

1 个答案:

答案 0 :(得分:2)

最可能的问题是你的语言环境。 PHP将尝试按给定顺序设置区域设置,设置它可以找到的第一个区域。如果pt_BR未在您的系统上使用UTF-8,则您的结果将不会被UTF-8编码。由于您尝试pt_BR.utf-8作为第二选择,因此PHP可能更喜欢使用非UTF-8版本。

  1. 检查您安装的区域设置:

    $ locale -a
    

    对于Windows,请看这里:
    https://msdn.microsoft.com/en-us/library/39cwe7zf%28v=vs.90%29.aspx
    (未经证实的信息,我不知道是否有更多Windows-y方式可以做到这一点。)

  2. 首先选择UTF-8语言环境:

    setlocale(LC_ALL, 'pt_BR.utf-8', 'pt_BR', 'portuguese-brazilian');
    
  3. 测试实际选择的区域设置:

    echo setlocale(..);