不要用字符串拼接构建 URL ― 结合 PowerShell + UriBuilder 安全构建包含日语查询参数的 URL

プログラミング・Web開発カテゴリを表すパンダのイラスト 编程・Web开发

关于本文
本文通过利用生成 AI 的自动化流程创建。我们确认了 .NET 的 UriBuilder 和 Uri.EscapeDataString 规范,并将其整理为避免使用字符串拼接构建 URL 的实用技巧。

验证状态:📘 已确认官方API・已完成PowerShell示例实现・未进行实机验证

不要用字符串拼接构建 URL ― 结合 PowerShell + UriBuilder 安全构建包含日语查询参数的 URL

在构建 API URL 时,如果仅使用 "?q=" + $keyword + "&page=" + $page 和字符串拼接,一旦夹杂了日语、空格、&= 等字符,就非常容易出问题。

通过在 PowerShell 中使用 .NET 的 UriBuilderUri.EscapeDataString,可以明确划分处理职责。

示例:将“東京 駅”作为搜索参数

# [ordered]是保持键的排列顺序的哈希表。


# 用于使每次输出的URL日志顺序一致且易于查看。

$params = [ordered]@{
    q    = "東京 駅"
    page = 2
}

# 逐个对键和值进行URL编码。


# 关键点是只将数据部分传递给EscapeDataString,而不是整个URL。

$query = (
    $params.GetEnumerator() | ForEach-Object {
        $key = [Uri]::EscapeDataString([string]$_.Key)
        $value = [Uri]::EscapeDataString([string]$_.Value)
        "$key=$value"
    }
) -join "&"

# UriBuilder是将URL作为结构进行构建的.NET类。

$builder = New-Object System.UriBuilder("https://example.com/search")
$builder.Query = $query

# 显示完成后的绝对URL。

$builder.Uri.AbsoluteUri

日语和空格将被转义为 URL 可接受的格式。

EscapeDataString 用于“值”

不要对整个 URL 进行整体转义,而是以查询的键或值为单位进行处理。如果连 https:/// 一起转换,URL 结构本身将会被破坏。

flowchart LR
    A[Base URL] --> C[UriBuilder]
    B[query values] --> D[EscapeDataString]
    D --> C
    C --> E[完成URL]

适用于哪些场景?

  • REST API 调用

  • 生成搜索 URL

  • 包含日语文件名的 URL

  • 批量生成带参数的链接

虽然代码很短,但比“草率拼接字符串”要安全得多。

GitHub 示例

官方信息与一手资料

文档信息

文章??
不要用字符串拼接构建 URL ― 结合 PowerShell + UriBuilder 安全构建包含日语查询参数的 URL
?布日期
更新日期
来源
https://papanda925.com/?p=15250&lang=zh

?可: ?于本站?有相??利的正文及原??表,除非?有?明,可依据 CC BY 4.0 使用。本文可能包含使用生成式AI?建或??的内容。若代??有?可声明,或?接的GitHub???定了?可,?代?以??可?准。引用内容、第三方?料、?片及商?不在本?可范?内。 使用政策

标题和URL已复制