php - 在 Windows 命令提示符上显示 UTF-8 输出

标签 php windows command-line utf-8

在 Windows 上,PHP 命令行脚本的输出根据当前配置的代码页和控制台字体进行解释。在西欧,这通常默认为 850位图。这意味着以 UTF-8(自 PHP/5.4 以来的事实上的标准)编写的脚本:

<?php
echo 'Café: 1,25 €' . PHP_EOL;

...通常看起来像这样:

C:\tmp>php test.php
Caf├®: 1,25 Ôé¼

usual workaround是使用 *.bat 包装器:

@echo off
chcp 65001 > NUL
php test.php

它不能解决字体问题,但通常已经足够了。

我的双重问题:

  1. 是否可以在 PHP 中设置代码页,以便我们可以省略包装器? (使用程序执行函数来运行 chcp 不起作用,因为它发生在不同的进程中。)

  2. 这是 PHP 使用的控制台库的限制吗? (Node.js 脚本始终显示来自 UTF-8 源的正确输出,无论本地代码页如何,字体除外。)

最佳答案

回答你的问题1:

您可以尝试iconv 。请注意,通过这种方式,您可以更改输出的编码,而不是控制台代码页。但是,它会导致控制台和脚本输出的编码相同,这一点很重要(请参阅此 post ):

iconv("UTF-8", "CP1252", $data); // copied from example on php.net

将其包装在函数中可以为您提供非常方便的工具来将字符串输出到控制台:

function message($string)
{
  iconv("UTF-8", "CP1252", $string);
}

所以代替:

echo $string;

用途:

message($string);

您可以通过从代码中获取当前控制台代码页来更进一步:

function getCodePage()
{
  $consoleEncoding = explode(":", exec("chcp"));
  return trim($consoleEncoding[1]);
}

这使您可以更改message函数,以便脚本始终使用正确的代码页:

function message($string)
{
  iconv("UTF-8", "CP" .getCodePage(), $string);
}

关于php - 在 Windows 命令提示符上显示 UTF-8 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22349129/

相关文章:

php - 在ajax中返回foreach响应

php - 我正在尝试使用 php 和 jquery.php 变量更改 div 的背景图像,但未获取值

c++ - Windows 问题上的 libcurl

c - 外文字符替换为 "?"

java - Java 中的 PHP 包 ("N", $str)

php - 带有文本的自动高面板主体

c# - 自动从 C# 代码调试过程并读取寄存器值

windows - UWP 中用于 Xamarin Forms 项目的 AES 加密

ios - 为什么在从命令行创建 IPA 时我的构建阶段脚本不被执行?

Linux:可以扩展和别名吗?