php - parse_url() 在 PHPUnit 和普通 PHP 文件中的行为不同
问题描述
使用 UTF8 和 IDN 域调试 PHP 代码时,我发现普通 PHP 文件和我无法解释的单元测试之间存在差异,这归结为parse_url()
工作原理:
我有一个测试文件:
$url = 'http://普遍接受-测试.世界';
$host = parse_url($url, PHP_URL_HOST);
var_dump('普遍接受-测试.世界' === $host);
true
正如预期的那样输出
但是,相同的比较在相同 PHP 设置的单元测试中失败:
class Test extends TestCase
{
public function testParse()
{
$url = 'http://普遍接受-测试.世界';
$host = parse_url($url, PHP_URL_HOST);
$this->assertEquals( '普遍接受-测试.世界', $host );
}
}
$ php phpunit-9.1.phar test.php
PHPUnit 9.1.5 by Sebastian Bergmann and contributors.
F 1 / 1 (100%)
Time: 00:00.140, Memory: 12.00 MB
There was 1 failure:
1) Test::testParse
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'普遍接受-测试.世界'
+'普▒__接▒_▒-测试.世界'
D:\phpunit\test.php:31
FAILURES!
Tests: 1, Assertions: 1, Failures: 1.
所以,似乎 PHPUnit 修改了 PHP 看待 UTF8 的方式:知道我应该在哪里解决这个问题吗?
解决方案
推荐阅读
- openlayers - Openlayers Pbf 矢量切片性能不佳
- nestjs - 在 monorepo 中带有共享库的 Nestjs
- android - 如何正确处理滑动删除和撤消?
- r - R. 如果 B 列以字符开头,则替换 A 列的元素
- arrays - 更改数组以发布 API 数据
- ios - 从 Apple Watch 获取心跳 (HKHeartbeatSeriesBuilder)
- python - /saml_auth2/acs/ 处的 ModuleNotFoundError
- php - Azure DevOps Microsoft 托管的 Windows 代理上的自定义 PHP 扩展
- c++ - openssl EVP_DigestUpdate() 函数失败
- delphi - Delphi 组件自定义属性不保存在 DFM 文件中