Универсальная нормализация путей при парсинге в 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
и проверьте ее на представленных в уроке
тестах.