Универсальная нормализация путей при парсинге в PHP

Давайте реализуем функцию normalize, которая будет выполнять универсальную нормализацию путей. Пусть первым параметром функция принимает запрошенный URL, а вторым параметром - путь, который следуюет нормализовать:

<?php function normalize($targ, $path) { // ваша реализация } ?>

Реализованную функцию будем проверять на следующих тестах:

<?php $tests = [ [ 'targ' => 'http://targ.loc/cat/sat/', 'path' => 'http://targ.loc/dir/page.html', 'norm' => 'http://targ.loc/dir/page.html', ], [ 'targ' => 'http://targ.loc/cat/sat/', 'path' => '/', 'norm' => 'http://targ.loc/', ], [ 'targ' => 'http://targ.loc/', 'path' => '/', 'norm' => 'http://targ.loc/', ], [ 'targ' => 'http://targ.loc', 'path' => '/', 'norm' => 'http://targ.loc/', ], [ 'targ' => 'http://targ.loc/', 'path' => '/dir/page.html', 'norm' => 'http://targ.loc/dir/page.html', ], [ 'targ' => 'http://targ.loc/cat/', 'path' => '/dir/page.html', 'norm' => 'http://targ.loc/dir/page.html', ], [ 'targ' => 'http://targ.loc/cat/sat/', 'path' => '/dir/page.html', 'norm' => 'http://targ.loc/dir/page.html', ], [ 'targ' => 'http://targ.loc', 'path' => '/dir/page.html', 'norm' => 'http://targ.loc/dir/page.html', ], [ 'targ' => 'http://targ.loc/', 'path' => 'dir/page.html', 'norm' => 'http://targ.loc/dir/page.html', ], [ 'targ' => 'http://targ.loc/cat/', 'path' => 'dir/page.html', 'norm' => 'http://targ.loc/cat/dir/page.html', ], [ 'targ' => 'http://targ.loc/cat/sat/', 'path' => './dir/page.html', 'norm' => 'http://targ.loc/cat/sat/dir/page.html', ], [ 'targ' => 'http://targ.loc/cat/', 'path' => './dir/page.html', 'norm' => 'http://targ.loc/cat/dir/page.html', ], [ 'targ' => 'http://targ.loc/', 'path' => './dir/page.html', 'norm' => 'http://targ.loc/dir/page.html', ], [ 'targ' => 'http://targ.loc/cat/sat/', 'path' => '../dir/page.html', 'norm' => 'http://targ.loc/cat/dir/page.html', ], [ 'targ' => 'http://targ.loc/cat/sat/', 'path' => '../../dir/page.html', 'norm' => 'http://targ.loc/dir/page.html', ], [ 'targ' => 'http://targ.loc/cat/sat/', 'path' => '../../../dir/page.html', 'norm' => 'http://targ.loc/dir/page.html', ], ]; ?>

Код для проверки тестов:

<?php foreach ($tests as $key => $test) { $norm = normalize($test['targ'], $test['path']); if ($norm === $test['norm']) { echo " <p style=\"color: green\"> тест $key пройден </p> "; } else { echo " <p style=\"color: red\"> тест $key не пройден<br> ожидалось: '{$test['norm']}'<br> получено: $norm </p> "; } } ?>

Реализуйте описанную функцию normalize и проверьте ее на представленных в уроке тестах.



Чат с GPT Компилятор