diff --git a/respx/patterns.py b/respx/patterns.py
index ed4c51d..3bf8d9b 100644
--- a/respx/patterns.py
+++ b/respx/patterns.py
@@ -413,7 +413,16 @@ class Path(Pattern):
         self, value: Union[str, RegexPattern[str]]
     ) -> Union[str, RegexPattern[str]]:
         if self.lookup in (Lookup.EQUAL, Lookup.STARTS_WITH) and isinstance(value, str):
-            path = urljoin("/", value)  # Ensure leading slash
+            # Percent encode path, i.e. revert parsed path by httpx.URL.
+            # Borrowed from HTTPX's "private" quote and percent_encode utilities.
+            path = "".join(
+                char
+                if char
+                in "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~/"
+                else "".join(f"%{byte:02x}" for byte in char.encode("utf-8")).upper()
+                for char in value
+            )
+            path = urljoin("/", path)  # Ensure leading slash
             value = httpx.URL(path).path
         elif self.lookup is Lookup.REGEX and isinstance(value, str):
             value = re.compile(value)

diff --git a/tests/test_api.py b/tests/test_api.py
index 151da8d..c126408 100644
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -82,6 +82,7 @@ async def test_http_methods(client):
         ("https://foo.bar/baz/", re.compile(r"^https://foo.bar/\w+/$")),
         ("https://foo.bar/baz/", (b"https", b"foo.bar", None, b"/baz/")),
         ("https://foo.bar:443/baz/", (b"https", b"foo.bar", 443, b"/baz/")),
+        ("https://foo.bar/%08", "https://foo.bar/%08"),
     ],
 )
 async def test_url_match(client, url, pattern):

URL pattern does not match or fails on URL-encoded special ascii symbols in URL
Hey!

I have faced a bug during an attempt to use respx with hypothesis to mock autogenerated URLs when encoded special symbols are present in the url path.

This code fails with the `AllMockedAssertionError`:
```python
import httpx
import respx

with respx.mock:
    url = 'http://test.com/%0a'
    respx.get(url=url).respond()
    httpx.get(url)
```

This code fails with `httpx.InvalidURL`:
```python
with respx.mock:
    url = 'http://test.com/%08'
    respx.get(url=url).respond()
    assert httpx.get(url).status_code == 200
```
Full traceback:
```
Traceback (most recent call last):
  File "...", line 8, in <module>
    respx.get(url=url).respond()
  File ".../python3.9/site-packages/respx/api.py", line 74, in get
    return mock.get(url, name=name, **lookups)
  File ".../python3.9/site-packages/respx/router.py", line 174, in get
    return self.request(method="GET", url=url, name=name, **lookups)
  File ".../python3.9/site-packages/respx/router.py", line 165, in request
    return self.route(method=method, url=url, name=name, **lookups)
  File ".../python3.9/site-packages/respx/router.py", line 132, in route
    route = Route(*patterns, **lookups)
  File ".../python3.9/site-packages/respx/models.py", line 119, in __init__
    self._pattern = M(*patterns, **lookups)
  File ".../python3.9/site-packages/respx/patterns.py", line 544, in M
    extras = parse_url_patterns(value)
  File ".../python3.9/site-packages/respx/patterns.py", line 648, in parse_url_patterns
    bases[Path.key] = Path(url.path, lookup=lookup)
  File ".../python3.9/site-packages/respx/patterns.py", line 92, in __init__
    self.value = self.clean(value)
  File ".../python3.9/site-packages/respx/patterns.py", line 417, in clean
    value = httpx.URL(path).path
  File ".../python3.9/site-packages/httpx/_urls.py", line 113, in __init__
    self._uri_reference = urlparse(url, **kwargs)
  File ".../python3.9/site-packages/httpx/_urlparse.py", line 160, in urlparse
    raise InvalidURL("Invalid non-printable ASCII character in URL")
httpx.InvalidURL: Invalid non-printable ASCII character in URL
```

I could reproduce this problem only with the `url` pattern, the following works fine:
```python
from urllib.parse import urlparse

import httpx
import respx

with respx.mock:
    url = 'http://test.com/%08'
    parsed = urlparse(url)
    respx.get(scheme=parsed.scheme, host=parsed.hostname, path=parsed.path, params=parsed.params).respond()
    assert httpx.get(url).status_code == 200
```

Versions:
* python 3.9.7
* respx==0.20.1
* httpx==0.24.0
tests/test_api.py::test_url_match[https://foo.bar/%08-https://foo.bar/%08]
tests/test_api.py::test_http_methods tests/test_api.py::test_url_match[https://foo.bar-https://foo.bar] tests/test_api.py::test_url_match[https://foo.bar/baz/-None] tests/test_api.py::test_url_match[https://foo.bar/baz/-] tests/test_api.py::test_url_match[https://foo.bar/baz/-https://foo.bar/baz/] tests/test_api.py::test_url_match[https://foo.bar/baz/-^https://foo.bar/\\w+/$] tests/test_api.py::test_url_match[https://foo.bar/baz/-pattern5] tests/test_api.py::test_url_match[https://foo.bar:443/baz/-pattern6] tests/test_api.py::test_invalid_url_pattern tests/test_api.py::test_repeated_pattern tests/test_api.py::test_status_code tests/test_api.py::test_headers[headers0-None-expected0] tests/test_api.py::test_headers[headers1-None-expected1] tests/test_api.py::test_headers[headers2-ham/spam-expected2] tests/test_api.py::test_text_encoding[eldr\xc3\xa4v-eldr\xe4v] tests/test_api.py::test_text_encoding[\xe4pple-\xe4pple] tests/test_api.py::test_text_encoding[Geh&#xE4;usegr\xf6\xdfe-Geh&#xE4;usegr\xf6\xdfe] tests/test_api.py::test_content_variants[content-foobar-None0] tests/test_api.py::test_content_variants[content-foobar-None1] tests/test_api.py::test_content_variants[json-value2-application/json] tests/test_api.py::test_content_variants[json-value3-application/json] tests/test_api.py::test_content_variants[text-foobar-text/plain; tests/test_api.py::test_content_variants[html-<strong>foobar</strong>-text/html; tests/test_api.py::test_json_content[content0-headers0-expected_headers0] tests/test_api.py::test_json_content[content1-headers1-expected_headers1] tests/test_api.py::test_json_post_body tests/test_api.py::test_raising_content tests/test_api.py::test_callable_content tests/test_api.py::test_request_callback tests/test_api.py::test_pass_through[httpcore-route0-True] tests/test_api.py::test_pass_through[httpx-route1-True] tests/test_api.py::test_pass_through[httpcore-route2-False] tests/test_api.py::test_pass_through[httpcore-route3-True] tests/test_api.py::test_parallel_requests tests/test_api.py::test_method_case[DELETE-delete] tests/test_api.py::test_method_case[delete-delete] tests/test_api.py::test_method_case[GET-get] tests/test_api.py::test_method_case[get-get] tests/test_api.py::test_method_case[HEAD-head] tests/test_api.py::test_method_case[head-head] tests/test_api.py::test_method_case[OPTIONS-options] tests/test_api.py::test_method_case[options-options] tests/test_api.py::test_method_case[PATCH-patch] tests/test_api.py::test_method_case[patch-patch] tests/test_api.py::test_method_case[POST-post] tests/test_api.py::test_method_case[post-post] tests/test_api.py::test_method_case[PUT-put] tests/test_api.py::test_method_case[put-put] tests/test_api.py::test_pop tests/test_api.py::test_params_match[https://foo/-foo=bar-https://foo/-foo=bar0] tests/test_api.py::test_params_match[https://foo/-foo=bar-https://foo/-foo=bar1] tests/test_api.py::test_params_match[https://foo/-params2-https://foo/-call_params2] tests/test_api.py::test_params_match[https://foo/-params3-https://foo/-call_params3] tests/test_api.py::test_params_match[https://foo/-params4-https://foo/-call_params4] tests/test_api.py::test_params_match[https://foo?foo=bar-baz=qux-https://foo?foo=bar-baz=qux] tests/test_api.py::test_params_match[https://foo?foo=bar-baz=qux-https://foo?foo=bar&baz=qux-None] tests/test_api.py::test_params_match[https://foo/(\\w+)/-foo=bar-https://foo/bar/-foo=bar] tests/test_api.py::test_params_match[url8-foo=bar-https://foo/-foo=bar] tests/test_api.py::test_params_match[url9-baz=qux-https://foo?foo=bar&baz=qux-None] tests/test_api.py::test_build_url_base[None-https://foo.bar/baz/] tests/test_api.py::test_build_url_base[-https://foo.bar/baz/] tests/test_api.py::test_build_url_base[https://foo.bar-baz/] tests/test_api.py::test_build_url_base[https://foo.bar/-baz/] tests/test_api.py::test_build_url_base[https://foo.bar/-/baz/] tests/test_api.py::test_build_url_base[https://foo.bar/baz/-None] tests/test_api.py::test_build_url_base[https://foo.bar/-/(\\w+)/] tests/test_api.py::test_add tests/test_api.py::test_respond tests/test_api.py::test_async_post_content[kwargs0] tests/test_api.py::test_async_post_content[kwargs1] tests/test_api.py::test_async_post_content[kwargs2] tests/test_api.py::test_async_post_content[kwargs3] tests/test_api.py::test_async_post_content[kwargs4]