关于本文
本文通过利用生成 AI 的自动化流程创建。我们确认了 .NET 的 UriBuilder 和 Uri.EscapeDataString 规范,并将其整理为避免使用字符串拼接构建 URL 的实用技巧。验证状态:📘 已确认官方API・已完成PowerShell示例实现・未进行实机验证
不要用字符串拼接构建 URL ― 结合 PowerShell + UriBuilder 安全构建包含日语查询参数的 URL
在构建 API URL 时,如果仅使用 "?q=" + $keyword + "&page=" + $page 和字符串拼接,一旦夹杂了日语、空格、&、= 等字符,就非常容易出问题。
通过在 PowerShell 中使用 .NET 的 UriBuilder 和 Uri.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
批量生成带参数的链接
虽然代码很短,但比“草率拼接字符串”要安全得多。

