首页 > 解决方案 > 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 的方式:知道我应该在哪里解决这个问题吗?

标签: phputf-8phpunit

解决方案


推荐阅读