KickAssTorrents.com で torrent を閲覧していましたが、リンクにアクセスすると、URL が別の方法でエンコードされています。
例 (IMDb リンク): http://kat.ph/account/confirm/url/aHR0cDovL3d3dy5pbWRiLmNvbS90aXRsZS90dDA0MDE3Mjk=/
今、文字を変更すると、リンクで何かが変更され、C# または jQuery でこれを行う方法を知りたいですか?!
KickAssTorrents.com で torrent を閲覧していましたが、リンクにアクセスすると、URL が別の方法でエンコードされています。
例 (IMDb リンク): http://kat.ph/account/confirm/url/aHR0cDovL3d3dy5pbWRiLmNvbS90aXRsZS90dDA0MDE3Mjk=/
今、文字を変更すると、リンクで何かが変更され、C# または jQuery でこれを行う方法を知りたいですか?!
C# の場合:
static public string EncodeTo64(string toEncode) {
byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode);
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
return returnValue;
}
static public string DecodeFrom64(string encodedData) {
byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
string returnValue = System.Text.ASCIIEncoding.ASCII.GetString(encodedDataAsBytes);
return returnValue;
}
MessageBox.Show(DecodeFrom64("aHR0cDovL3d3dy5pbWRiLmNvbS90aXRsZS90dDA0MDE3Mjk="));
System.Text.UTF8Encoding.UTF8.GetBytes(...)
文字列toEncode
に ASCII 以外の文字が含まれている場合に使用します。この場合、URL をデコードする当事者は、これらの文字を正しく処理できなければならないことに注意してください。
また、デビッド・ハーディンによって言及された のケースを見て、言及さ=
れた問題のいずれかがあなたに当てはまるかどうかを確認してください。または、David's answerを使用してください。+
/
jQuery: google 'jquery base64 encode' (サイト plugins.jquery.com は現在オフラインのようで、確認できません)
https://stackoverflow.com/a/1789179から以下のコードを使用することをお勧めします
///<summary>
/// Base 64 Encoding with URL and Filename Safe Alphabet using UTF-8 character set.
///</summary>
///<param name="str">The origianl string</param>
///<returns>The Base64 encoded string</returns>
public static string Base64ForUrlEncode(string str)
{
byte[] encbuff = Encoding.UTF8.GetBytes(str);
return HttpServerUtility.UrlTokenEncode(encbuff);
}
///<summary>
/// Decode Base64 encoded string with URL and Filename Safe Alphabet using UTF-8.
///</summary>
///<param name="str">Base64 code</param>
///<returns>The decoded string.</returns>
public static string Base64ForUrlDecode(string str)
{
byte[] decbuff = HttpServerUtility.UrlTokenDecode(str);
return Encoding.UTF8.GetString(decbuff);
}
理由は、Base64 に無効な URL 文字が含まれているためです。
JavaScript-
var encodedStr = window.btoa("StringToEncode");
var decodedStr = window.atob( encodedStr ); //"StringToEncode"
Eugene Ryabtsev からの受け入れられた回答が正しいとは思いません。「\xff」で試してみると、次のことがわかります。
DecodeFrom64(EncodeTo64("\xff")) == "?" (i.e. "\x3f")
その理由は、ASCIIEncoding がコード 127 より先に進まないためです。128 から 255 までのすべての文字は理解されず、「?」に変換されます。
したがって、次のように拡張エンコーディングが必要です。
static public string EncodeTo64(string toEncode) {
var e = Encoding.GetEncoding("iso-8859-1");
byte[] toEncodeAsBytes = e.GetBytes(toEncode);
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
return returnValue;
}
static public string DecodeFrom64(string encodedData) {
var e = Encoding.GetEncoding("iso-8859-1");
byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
string returnValue = e.GetString(encodedDataAsBytes);
return returnValue;
}