LoginSignup
3
3

More than 5 years have passed since last update.

.Net(C#)とJavaScript(Node.js)でURLエンコード

Posted at
  • クライアント側:C#.net
  • サーバ側:Node.js

上の構成にてアプリケーションを作成しており、クライアント側からURLでユーザ入力文字列を渡す必要があったので、そのときのURLエンコード、デコードのメモを残します。

やりたかった事

ユーザ入力文字列をURLからNodeに渡したい。

調査対象文字列

`~!@#$%^&*()-_=+[{]}\|;:'",<.>/ ?

アルファベットや数値はエンコードしないでしょー、日本語とかの文字列はエンコードするでしょーってことで上に挙げた文字列を対象とし、エンコードデコードの動作を調査した。

環境

  • OSはサーバ、クライアントともWin7
  • C#.Net 2.0
  • Node.js v0.10.28

使用したメソッド

  • C#
    System.Web.HttpUtility.UrlEncode()
  • Node
    decodeURI()
    decodeURIComponent()

調査結果

クライアント(C#.Net)でのエンコード時

%60%7e!%40%23%24%25%5e%26*()-_%3d%2b%5b%7b%5d%7d/%7c%3b%3a%27%22%2c%3c.%3e/+%3f

!*()-_./はエンコードされない。半角空白は+として現れる。
\(円、バックスラッシュ)は/(スラッシュ)に置換されるみたい。

サーバ(Node.js)でのデコード時

decodeURI()

`~!%40%23%24%^%26*()-_%3d%2b[{]}/|%3b%3a'"%2c<.>/+%3f

いくつかの文字列を期待通りにデコードしない。

decodeURIComponent()

`~!@#$%^&*()-_=+[{]}/|;:'",<.>/+?

ほぼ期待通り。ただし、クライアントから送られてくる時点で\が/に置換されており、+が本来の意味の+と空白であった+がそのまま出現する。

最終的に…

  1. クライアント側でSystem.Web.HttpUtility()を使用してURLをエンコード
  2. サーバ側で受信したエンコード済みURL文字列をreplace('+', ' ')で+を空白に置換
  3. +置換済み文字列をdecodeURIComponent()でデコード

する方法を採用しました。\と/は入力を許可していないので問題なしと判断しています。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3