繁体   English   中英

使用 PHP 以非 ASCII 字符输出日期

[英]Outputting dates in non-ASCII characters with PHP

我正在尝试以繁体中文输出日期。

我将日期作为 Unix 时间戳,(例如: "1467244800" )。

我正在做以下事情:

<?php
setlocale (LC_TIME, "zh_TW");
echo strftime("%e %B %Y", $timestamp );
?>

我得到的输出是Unicode“未定义”字符:

30 ���� 2016
17 �T�� 2016
18 �Q�G�� 2015 

谁能告诉我我做错了什么?

我的 HTML 标头包含:

<html lang="zh-TW">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

我在页面上的其余中文内容输出正常。 如果您查看页面源,您会看到:

<span>最新消息</span>
<span class="pipe">18 �Q�G�� 2015</span>

只有 strftime() 日期显示为“未定义”字符: ...

谢谢你看...

语言环境不仅有不同的语言,还有不同的编码。 默认的zh_TW语言环境可能会使用一些中文编码,而您想要的是 UTF-8。 因此,请使用 UTF-8 版本的语言环境:

setlocale(LC_TIME, 'zh_TW.UTF-8');

这取决于您的特定系统以及其上安装的语言环境。 在命令行上检查:

$ locale -a
...
zh_TW
zh_TW.Big5
zh_TW.UTF-8

为了更加跨平台兼容,您可以尝试几种语言环境:

setlocale(LC_TIME, 'zh_TW.UTF-8', 'zh_TW.utf8', 'zh_TW');

您可能必须告诉 PHP 所有字符串都是 UTF-8。 例如:

    mb_internal_encoding('UTF-8');

或者,如果问题仅在于这个字符串:

    $out = strftime("%e %B %Y", $timestamp);
    echo mb_convert_encoding($out, 'UTF-8', mb_detect_encoding($out));

或者如果mb_detect_encoding()不能正常工作:

    $out = strftime("%e %B %Y", $timestamp);
    echo mb_convert_encoding($out, 'UTF-8', 'CNS-11643');

PHP 7 版本之前基本不知道字符串的编码。 一切都只是一个 8 位字节的数组。 获得正确的输出编码有时可以立即生效,但有时您必须手动设置所有内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM