URLを文字列連結で作らない ― PowerShell + UriBuilderで日本語クエリも安全に組み立てる

プログラミング・Web開発

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。.NETのUriBuilderとUri.EscapeDataString仕様を確認し、URLを文字列連結で作らないTIPSとして整理しています。

検証ステータス:📘 公式API確認済み・PowerShellサンプル実装済み・実機未確認

URLを文字列連結で作らない ― PowerShell + UriBuilderで日本語クエリも安全に組み立てる

API URLを作るとき、"?q=" + $keyword + "&page=" + $page と文字列連結だけで済ませると、日本語、空白、&= などが混ざった瞬間に壊れやすくなります。

PowerShellから.NETの UriBuilderUri.EscapeDataString を使うと、処理の役割を分けられます。

例: 「東京 駅」を検索パラメータにする

# [ordered]は、キーの並び順を保つハッシュテーブルです。


# URLのログを毎回同じ順で見やすくするために使っています。

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

# キーと値を1件ずつURLエンコードします。


# URL全体ではなく、データ部分だけをEscapeDataStringへ渡すのがポイントです。

$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サンプル

公式情報・一次情報

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました