我用一个包含以下内容的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终端,所以我至少还要再用几年的经典游戏机。
发布于 2020-04-03 21:51:03
在Windows 10和PHP 7.2中也遇到了同样的问题。
解决了从fgets()
切换到readline()
函数的问题。
结合chcp 65001
设置的Unicode代码页,收到的输入现在是有效的UTF8。不需要转换。
https://stackoverflow.com/questions/58791490
复制相似问题