Официальная документация NextJS 13 (beta) описывает параметры динамического маршрута в по этой ссылке.
Объяснение:
app/shop/[slug]/page.js
Чтобы получить доступ к слагу, мы используем params.slug
.
Пример:
app/shop/this-is-shop/page.js
Здесь params. slug
возврат -> this-is-shop
.
Если мы используем другой язык, кроме английского, например, на хинди:
app/shop/यह-दुकान-है/page.js
params.slug
вернуться -> %E0%A4%B9-%E0%A4%A6%E0%A5%81%E0%A4%95%E0%A4%BE%E0%A4%A8-%E0%A4%B9%E0%A5%88
.
Но он должен вернуться -> यह-दुकान-है
.
В этом проблема. Как это исправить? Или способ получить фактический текст?
Это не проблема, связанная с Next.js. Вот как работают URL-адреса. В URL-адресе может быть только ограниченное количество символов. Другие должны быть закодированы. Вот цитата из статьи с URLEncoder.io:
URL-адрес состоит из ограниченного набора символов, принадлежащих к набору символов US-ASCII. Эти символы включают цифры (
0-9
), буквы (A-Z
,a-z
) и несколько специальных символов ("-"
,"."
,"_"
,"~"
).Управляющие символы ASCII (например, backspace, вертикальная табуляция, горизонтальная табуляция, перевод строки и т. д.), небезопасные символы, такие как пробел,
\
,<
,>
,{
,}
и т. д., а также любые символы, не входящие в кодировку ASCII, не могут быть размещены непосредственно в URL-адресах. .Более того, некоторые символы имеют особое значение в URL-адресах. Эти символы называются зарезервированными. Некоторые примеры зарезервированных символов:
?
,/
,#
,:
и т. д. Любые данные, передаваемые как часть URL-адреса, будь то в строке запроса или сегменте пути, не должны содержать эти символы.
Итак, что мы делаем, когда нам нужно передать какие-либо данные в URL, которые содержат эти запрещенные символы? Что ж, мы их кодируем!
Кодирование URL-адресов преобразует зарезервированные, небезопасные и не-ASCII-символы в URL-адресах в формат, общепринятый и понятный для всех веб-браузеров и серверов...
То, что вы видите, является закодированной версией «यह-दुकान-है», как вы можете видеть в этом примере:
console.info(encodeURI("यह-दुकान-है"))
Если вам нужно начальное значение, используйте decodeURI()
, например:
console.info(decodeURI('%E0%A4%AF%E0%A4%B9-%E0%A4%A6%E0%A5%81%E0%A4%95%E0%A4%BE%E0%A4%A8-%E0%A4%B9%E0%A5%88'));