<?php
$url_input = 'https://e...content-available-to-author-only...e.com/page/ゴッホ?search=星月夜&limit=20&offset=0';
// 検証
function is_url( $url, $encode = true ){
if( $encode ){
$url = my_urlencode($url);
}
}
// 検証のために必要箇所をエンコード
function my_urlencode($url){
// パスをエンコード
$path = $parsed['path'] ?? '';
$path = rtrim($path,'/'); // 末尾スラッシュなしで統一 $path_str = '';
foreach($path_arr as $path){
}
$parsed['path'] = rtrim($path_str,'/');
// パラをエンコード
$query = $parsed['query'] ?? '';
$para_info = [];
if( $query ){
parse_str($query, $para_info); // 連想配列にして重複を削除 ksort($para_info); // ソート }
$para_str = '';
foreach($para_info as $k => $para){
$para_str .= $k . '=' . urlencode($para) . '&'; }
$parsed['query'] = rtrim($para_str,'&');
// 構築
$built = build_url($parsed);
if( $path === '' ){
$built = rtrim($built,'/'); }
if( $query === '' ){
$built = rtrim($built,'?'); }
return $built;
}
// parse_url の逆
function build_url
(array $elements) { $e = $elements;
return
(isset($e['scheme']) ?
"$e[scheme]://" : '//') . (isset($e['user']) ?
$e['user'] . (isset($e['pass']) ?
":$e[pass]" : '') . '@' : '') . $e['host'] .
(isset($e['port']) ?
":$e[port]" : '') ) : '') .
(isset($e['path']) ?
$e['path'] : '/') . (isset($e['fragment']) ?
"#$e[fragment]" : '') ;
}
PD9waHAKCiR1cmxfaW5wdXQgPSAnaHR0cHM6Ly9lLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLmNvbS9wYWdlL+OCtOODg+ODmz9zZWFyY2g95pif5pyI5aScJmxpbWl0PTIwJm9mZnNldD0wJzsKdmFyX2R1bXAoaXNfdXJsKCR1cmxfaW5wdXQsdHJ1ZSkpOwoKLy8g5qSc6Ki8CmZ1bmN0aW9uIGlzX3VybCggJHVybCwgJGVuY29kZSA9IHRydWUgKXsKICAgIGlmKCAkZW5jb2RlICl7CiAgICAgICAgJHVybCA9IG15X3VybGVuY29kZSgkdXJsKTsKICAgIH0KICAgIHJldHVybiBmYWxzZSAhPT0gZmlsdGVyX3ZhcigkdXJsLCBGSUxURVJfVkFMSURBVEVfVVJMKSAmJiBwcmVnX21hdGNoKCJbXmh0dHBzPys6Ly9daSIsICR1cmwpOwp9CgovLyDmpJzoqLzjga7jgZ/jgoHjgavlv4XopoHnrofmiYDjgpLjgqjjg7PjgrPjg7zjg4kKZnVuY3Rpb24gbXlfdXJsZW5jb2RlKCR1cmwpewogICAgJHBhcnNlZCA9IHBhcnNlX3VybCgkdXJsKTsKCiAgICAvLyDjg5HjgrnjgpLjgqjjg7PjgrPjg7zjg4kKICAgICRwYXRoID0gJHBhcnNlZFsncGF0aCddID8/ICcnOwogICAgJHBhdGggPSBydHJpbSgkcGF0aCwnLycpOyAvLyDmnKvlsL7jgrnjg6njg4Pjgrfjg6XjgarjgZfjgafntbHkuIAKICAgICRwYXRoX2FyciA9IGV4cGxvZGUoJy8nLCRwYXRoKTsgICAgCiAgICAkcGF0aF9zdHIgPSAnJzsKICAgIGZvcmVhY2goJHBhdGhfYXJyIGFzICRwYXRoKXsKICAgICAgICAkcGF0aF9zdHIgLj0gdXJsZW5jb2RlKCRwYXRoKSAuICcvJzsKICAgIH0KICAgICRwYXJzZWRbJ3BhdGgnXSA9IHJ0cmltKCRwYXRoX3N0ciwnLycpOwogICAgCiAgICAvLyDjg5Hjg6njgpLjgqjjg7PjgrPjg7zjg4kKICAgICRxdWVyeSA9ICRwYXJzZWRbJ3F1ZXJ5J10gPz8gJyc7CgkkcGFyYV9pbmZvID0gW107ICAgICAgICAKCWlmKCAkcXVlcnkgKXsKCQlwYXJzZV9zdHIoJHF1ZXJ5LCAkcGFyYV9pbmZvKTsgLy8g6YCj5oOz6YWN5YiX44Gr44GX44Gm6YeN6KSH44KS5YmK6ZmkCgkJa3NvcnQoJHBhcmFfaW5mbyk7IC8vIOOCveODvOODiAoJfQoJJHBhcmFfc3RyID0gJyc7CiAgICBmb3JlYWNoKCRwYXJhX2luZm8gYXMgJGsgPT4gJHBhcmEpewogICAgICAgICRwYXJhX3N0ciAuPSAkayAuICc9JyAuIHVybGVuY29kZSgkcGFyYSkgLiAnJic7CiAgICB9CQogICAgJHBhcnNlZFsncXVlcnknXSA9IHJ0cmltKCRwYXJhX3N0ciwnJicpOwogICAgCiAgICAvLyDmp4vnr4kKICAgICRidWlsdCA9IGJ1aWxkX3VybCgkcGFyc2VkKTsKICAgIGlmKCAkcGF0aCA9PT0gJycgKXsKICAgICAgICAkYnVpbHQgPSBydHJpbSgkYnVpbHQsJy8nKTsKICAgIH0KICAgIGlmKCAkcXVlcnkgPT09ICcnICl7CiAgICAgICAgJGJ1aWx0ID0gcnRyaW0oJGJ1aWx0LCc/Jyk7CiAgICB9CiAgICByZXR1cm4gJGJ1aWx0Owp9CgovLyBwYXJzZV91cmwg44Gu6YCGCmZ1bmN0aW9uIGJ1aWxkX3VybChhcnJheSAkZWxlbWVudHMpIHsKICAgICRlID0gJGVsZW1lbnRzOwogICAgcmV0dXJuCiAgICAgICAgKGlzc2V0KCRlWydob3N0J10pID8gKAogICAgICAgICAgICAoaXNzZXQoJGVbJ3NjaGVtZSddKSA/ICIkZVtzY2hlbWVdOi8vIiA6ICcvLycpIC4KICAgICAgICAgICAgKGlzc2V0KCRlWyd1c2VyJ10pID8gJGVbJ3VzZXInXSAuIChpc3NldCgkZVsncGFzcyddKSA/ICI6JGVbcGFzc10iIDogJycpIC4gJ0AnIDogJycpIC4KICAgICAgICAgICAgJGVbJ2hvc3QnXSAuCiAgICAgICAgICAgIChpc3NldCgkZVsncG9ydCddKSA/ICI6JGVbcG9ydF0iIDogJycpCiAgICAgICAgKSA6ICcnKSAuCiAgICAgICAgKGlzc2V0KCRlWydwYXRoJ10pID8gJGVbJ3BhdGgnXSA6ICcvJykgLgogICAgICAgIChpc3NldCgkZVsncXVlcnknXSkgPyAnPycgLiAoaXNfYXJyYXkoJGVbJ3F1ZXJ5J10pID8gaHR0cF9idWlsZF9xdWVyeSgkZVsncXVlcnknXSwgJycsICcmJykgOiAkZVsncXVlcnknXSkgOiAnJykgLgogICAgICAgIChpc3NldCgkZVsnZnJhZ21lbnQnXSkgPyAiIyRlW2ZyYWdtZW50XSIgOiAnJykKICAgIDsKfQ==