我使用包含以下内容的start.bat启动我的PHP CLI脚本:
@echo off
chcp 65001 > NUL
php engine.php
“ chcp 65001”部分专门使其使用Unicode(但未使用)。
engine.php包含:
<?php
$input = fgets(STDIN);
var_dump($input);
当我运行start.bat时,它将打开一个正在运行engine.php的控制台:
åäölöäå
string(9) " l
"
Press any key to continue . . .
如您所见,它将去除除“ l”之外的所有字符。这意味着我依赖我粘贴文本作为输入中断的脚本,这完全破坏了我的工作流程。我需要能够将复制的所有字符串粘贴到脚本中,并使其完美保存。
为什么会这样?我们该如何解决?
[请不要告诉我使用PowerShell。这是一个血腥的破碎烂摊子,即使我强迫它运行,它的行为也似乎相同(我再也不想再处理了)。另外,我还没有Windows终端,因此我至少在经典控制台上呆了几年。
在Windows 10和PHP 7.2中有相同的问题。
解决了切换到readline()
功能而不是fgets()
的问题。
与chcp 65001
设置的Unicode代码页结合,现在收到的输入是有效的UTF8。无需转换。