2017-03-13 14:26 阅读 46

如何在Windows 10命令提示符下运行PHP脚本时打印出平方根符号?

For a PHP (5.6) script that is run in the command line I am attempting to print the square root symbol but am failing to do so. Instead I get junk characters.

I have already read the many questions/answers on printing unicode characters from PHP CLI to the command line but none relate exactly to my example.

I am on Windows 10 using the standard command prompt (cmd.exe) which I am happy using.

I am using the Consolas font and have run chcp 65001 to set the prompt to utf-8. *Have also tried Lucida console*.

// Square root symbol

echo "\u221A";
echo "\xe2\x88\x9a";
echo '√';

I have tried iconv(), json_decode(), mb_convert_encoding() and pack() all unsuccessfully.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    duanlun4411 duanlun4411 2017-03-13 22:15


        shell_exec('chcp 65001'); // set to utf-8
        $formatter = "\033[0m%s
    "; // use white text
        $sqrt      = html_entity_decode('&radic;');
        $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, "
    点赞 评论 复制链接分享
  • duandong7980 duandong7980 2017-03-13 15:17
        echo "\u{221a}";
        echo json_decode('"\u221a"');
        echo html_entity_decode('&#x221a;', 0, 'UTF-8');

    Command line test session with "Consolas" font:

    W:\php-7.1.2-Win32-VC14-x64>type test.php
        echo "\u{221a}";
        echo json_decode('"\u221a"');
        echo html_entity_decode('&#x221a;', 0, 'UTF-8');
    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

    Edited to adapt to comments - Tested on PHP 5.6.30

        $entity = '&radic;';
        // 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);
    点赞 评论 复制链接分享