You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose Navigation如何传递包含斜杠(/)的字符串参数

解决方案

方案1:使用正则匹配路由规则(最简单)

Navigation组件支持在路径参数后追加正则表达式,让参数匹配包含斜杠在内的所有后续字符,无需额外编码解码操作。
修改你的路由定义代码即可:

composable(
    // 加:.+ 表示匹配任意长度的任意字符,包括斜杠
    route = "Home/{url:.+}",
    arguments = listOf(
        navArgument("url") {
            type = NavType.StringType
        }
    )
)

跳转逻辑不需要改动,直接传带斜杠的字符串即可:

val url = "random.com/get/object"
navController.navigate("Home/${url}")

注意:该方案仅适合带斜杠的参数是路由的最后一个参数的场景,如果后面还要拼接其他路径参数,需要用第二种方案

方案2:URL编码 + 解码(兼容性最强)

如果你的路由还有后续参数,或者参数中还包含?、&、%等其他特殊字符,可以先对参数做URL编码再拼接路由,接收参数时再解码还原:

跳转时编码

import java.net.URLEncoder
import java.nio.charset.StandardCharsets

val originalUrl = "random.com/get/object"
// 编码后特殊字符会被转义,斜杠/会变成%2F
val encodedUrl = URLEncoder.encode(originalUrl, StandardCharsets.UTF_8.name())
navController.navigate("Home/${encodedUrl}")

接收时解码

import java.net.URLDecoder
import java.nio.charset.StandardCharsets

composable(
    route = "Home/{url}",
    arguments = listOf(navArgument("url") { type = NavType.StringType })
) { backStackEntry ->
    val encodedUrl = backStackEntry.arguments?.getString("url") ?: ""
    // 解码还原原始字符串
    val originalUrl = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.name())
    // 后续使用originalUrl即可
}

该方案适配所有场景,不会受参数位置、特殊字符类型的限制。

内容的提问来源于stack exchange,提问作者Thiago Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:54:02