在 Windows 10 命令提示符中 运行 a PHP 脚本时如何打印出平方根符号?
How to print out the square root symbol when running a PHP script in a Windows 10 command prompt?
对于在命令行中为 运行 的 PHP (5.6) 脚本,我试图打印平方根符号,但没有成功。相反,我得到了垃圾字符。
我已经阅读了许多 questions/answers 关于从 PHP CLI 打印 unicode 字符到命令行的文章,但 none 与我的示例完全相关。
我在 Windows 10 使用我很高兴使用的标准命令提示符 (cmd.exe)。
我使用的是 Consolas 字体,并且 运行 chcp 65001
将提示设置为 utf-8。 *也尝试过 Lucida 控制台*。
// Square root symbol
echo "\u221A";
echo "\xe2\x88\x9a";
echo '√';
我试过 iconv()
、json_decode()
、mb_convert_encoding()
和 pack()
都失败了。
<?
echo "\u{221a}";
echo json_decode('"\u221a"');
echo html_entity_decode('√', 0, 'UTF-8');
?>
使用 "Consolas" 字体的命令行测试会话:
W:\php-7.1.2-Win32-VC14-x64>type test.php
<?
echo "\u{221a}";
echo json_decode('"\u221a"');
echo html_entity_decode('√', 0, 'UTF-8');
?>
W:\php-7.1.2-Win32-VC14-x64>chcp
Página de códigos activa: 850
W:\php-7.1.2-Win32-VC14-x64>php test.php
√√√
W:\php-7.1.2-Win32-VC14-x64>chcp 65001
Página de códigos activa: 65001
W:\php-7.1.2-Win32-VC14-x64>php test.php
√√√
W:\php-7.1.2-Win32-VC14-x64>
已编辑 以适应评论 - 在 PHP 5.6.30
上测试
<?
$entity = '√';
// select the one you like the best
$squareRoot = '√';
$squareRoot = html_entity_decode($entity);
$squareRoot = mb_convert_encoding($entity, 'UTF-8', 'HTML-ENTITIES');
printf('test: %s', $squareRoot);
?>
<?php
shell_exec('chcp 65001'); // set to utf-8
$formatter = "3[0m%s\n"; // use white text
$sqrt = html_entity_decode('√');
$output = sprintf($formatter, $sqrt);
$output .= sprintf($formatter, $sqrt);
// Padding required on the last line to prevent miscellaneous chars printing to the console
// (Double the total number of lines (3))
$output .= sprintf($formatter, $sqrt . str_repeat(' ', 3*2));
echo rtrim($output, "\n");
对于在命令行中为 运行 的 PHP (5.6) 脚本,我试图打印平方根符号,但没有成功。相反,我得到了垃圾字符。
我已经阅读了许多 questions/answers 关于从 PHP CLI 打印 unicode 字符到命令行的文章,但 none 与我的示例完全相关。
我在 Windows 10 使用我很高兴使用的标准命令提示符 (cmd.exe)。
我使用的是 Consolas 字体,并且 运行 chcp 65001
将提示设置为 utf-8。 *也尝试过 Lucida 控制台*。
// Square root symbol
echo "\u221A";
echo "\xe2\x88\x9a";
echo '√';
我试过 iconv()
、json_decode()
、mb_convert_encoding()
和 pack()
都失败了。
<?
echo "\u{221a}";
echo json_decode('"\u221a"');
echo html_entity_decode('√', 0, 'UTF-8');
?>
使用 "Consolas" 字体的命令行测试会话:
W:\php-7.1.2-Win32-VC14-x64>type test.php
<?
echo "\u{221a}";
echo json_decode('"\u221a"');
echo html_entity_decode('√', 0, 'UTF-8');
?>
W:\php-7.1.2-Win32-VC14-x64>chcp
Página de códigos activa: 850
W:\php-7.1.2-Win32-VC14-x64>php test.php
√√√
W:\php-7.1.2-Win32-VC14-x64>chcp 65001
Página de códigos activa: 65001
W:\php-7.1.2-Win32-VC14-x64>php test.php
√√√
W:\php-7.1.2-Win32-VC14-x64>
已编辑 以适应评论 - 在 PHP 5.6.30
上测试<?
$entity = '√';
// select the one you like the best
$squareRoot = '√';
$squareRoot = html_entity_decode($entity);
$squareRoot = mb_convert_encoding($entity, 'UTF-8', 'HTML-ENTITIES');
printf('test: %s', $squareRoot);
?>
<?php
shell_exec('chcp 65001'); // set to utf-8
$formatter = "3[0m%s\n"; // use white text
$sqrt = html_entity_decode('√');
$output = sprintf($formatter, $sqrt);
$output .= sprintf($formatter, $sqrt);
// Padding required on the last line to prevent miscellaneous chars printing to the console
// (Double the total number of lines (3))
$output .= sprintf($formatter, $sqrt . str_repeat(' ', 3*2));
echo rtrim($output, "\n");