URLエンコード・デコード

使い方

文字列をURLエンコードしたり、またはURLエンコードされた文字列をデコードするツールです。

(1)処理を選択します。

(2)変換したい文字列を入力します。

(3)文字コードを選択します。(デコードの場合はAUTOも選択可能です)

(4)変換ボタンのクリックでエンコード又はデコード処理を行ないます。

※変換結果は全体をエンコード・デコード処理しますが、文字列がURLの場合はエンコード・デコードが必要な部分だけを処理します。

URLエンコードとは

URLとして使用できない日本語などの文字列を、「%」と「16進数」の組み合わせに変換したエスケープ処理のことをいいます。パーセントエンコーディングとも呼ばれる場合もあります。

例) テスト → %E3%83%86%E3%82%B9%E3%83%88

例) http://example.com/テスト/ → http://example.com/%E3%83%86%E3%82%B9%E3%83%88/

URLデコードとは

URLエンコードされた文字列を元の文字列へ戻すことをいいます。

例) %E3%83%86%E3%82%B9%E3%83%88 → テスト

例) http://example.com/%E3%83%86%E3%82%B9%E3%83%88/ → http://example.com/テスト/

サンプルコード

<?php

/**
 * URLエンコード
 * 引数:対象
 * 引数:オプション(0:エンコード 1:デコード)
 * 戻値:結果
 */
function _chgUrlEncode($p_sValue, $p_nFlg=0) {
	$bUrl = true;
	$arrUrl = getParseUrl($p_sValue);
	$sScheme = '';
	if (isset($arrUrl['protocol']) === true) {
		$sScheme = $arrUrl['protocol'];
	}
	$sHost = '';
	if (isset($arrUrl['authority']) === true) {
		$sHost = $arrUrl['authority'];
	}
	if ((strlen($sScheme) === 0) || (strlen($sHost) === 0)) {
		$bUrl = false;
	}
	$sPort = '';
	$sPath = '';
	if (isset($arrUrl['path']) === true) {
		if ($p_nFlg === 1) {
			$sPath = _chgDecode($arrUrl['path'], '/');
		} else {
			$sPath = _chgEncode($arrUrl['path'], '/');
		}
	}
	$sQuery    = '';
	if (isset($arrUrl['query']) === true) {
		if ($p_nFlg === 1) {
			$sQuery = _chgDecode($arrUrl['query'], '&');
		} else {
			$sQuery = _chgEncode($arrUrl['query'], '&');
		}
		if (strlen($sQuery) > 0) {
			$sQuery = '?'.$sQuery;
		}
	}
	$sFragment = '';
	if (isset($arrUrl['fragment']) === true) {
		if ($p_nFlg === 1) {
			$sFragment = _chgDecode($arrUrl['fragment'], '&');
		} else {
			$sFragment = _chgEncode($arrUrl['fragment'], '&');
		}
		if (strlen($sFragment) > 0) {
			$sFragment = '#'.$sFragment;
		}
	}
	//デコードエラ-
	if (($sPath === false) || ($sQuery === false) || ($sFragment === false)) {
		return -1;
	}
	if ($bUrl === false) {
		return false;
	}
	return $sScheme.$sHost.$sPort.$sPath.$sQuery.$sFragment;
}
/**
 * エンコード
 * 引数:対象
 * 引数:デリミタ
 * 戻値:結果
 */
function _chgEncode($p_sUrl, $p_sDelimiter='&') {
	$sResult   = '';
	$arrResult = array();
	$arrUrl    = explode($p_sDelimiter, $p_sUrl);
	if (count($arrUrl) > 0) {
		foreach ($arrUrl as $key=>$row) {
			$nPos = strpos($row, '=');
			if ($nPos === false) {
				$arrResult[] = rawurlencode($row);
			} else {
				$key2 = substr($row, 0, $nPos);
				$row2 = substr($row, $nPos + 1);
				$arrResult[] = rawurlencode($key2).'='.rawurlencode($row2);
			}
		}
		if (count($arrResult) > 0) {
			if ($p_sDelimiter === '&') {
				$p_sDelimiter = '&';
			}
			$sResult = implode($p_sDelimiter, $arrResult);
		}
	}
	return $sResult;
}
/**
 * デコード
 * 引数:対象
 * 引数:デリミタ
 * 戻値:結果
 */
function _chgDecode($p_sUrl, $p_sDelimiter='&') {
	$sResult   = '';
	$arrResult = array();
	$p_sUrl    = str_replace('&', '&', $p_sUrl);
	$arrUrl    = explode($p_sDelimiter, $p_sUrl);
	if (count($arrUrl) > 0) {
		foreach ($arrUrl as $key=>$row) {
			$nPos = strpos($row, '=');
			if ($nPos === false) {
				$sWord    = $row;
				$sWordChk = rawurldecode($sWord);
				if ($sWord !== $sWordChk) {
					$sWord = $sWordChk;
				}
				$arrResult[] = $sWord;
			} else {
				$sWordKey = substr($row, 0, $nPos);
				$sWordChk = rawurldecode($sWordKey);
				if ($sWordKey !== $sWordChk) {
					$sWordKey = $sWordChk;
				}
				$sWordRow = substr($row, $nPos + 1);
				$sWordChk = rawurldecode($sWordRow);
				if ($sWordRow !== $sWordChk) {
					$sWordRow = $sWordChk;
				}
				$arrResult[] = $sWordKey.'='.$sWordRow;
			}
		}
		if (count($arrResult) > 0) {
			if ($p_sDelimiter === '&') {
				$p_sDelimiter = '&';
			}
			$sResult = implode($p_sDelimiter, $arrResult );
		}
	}
	return $sResult;
}

//エンコード
var_dump(rawurlencode('a=あ&b=い'));
var_dump(_chgUrlEncode('http://localhost/?a=あ&b=い'));

//デコード
var_dump(rawurldecode('a%3D%E3%81%82%26b%3D%E3%81%84'));
var_dump(_chgUrlEncode('http://localhost/?a=%E3%81%82&b=%E3%81%84', 1));

?>
							
//エンコード
string(29) "a%3D%E3%81%82%26b%3D%E3%81%84"
string(45) "http://localhost/?a=%E3%81%82&amp;b=%E3%81%84"

//デコード
string(11) "a=あ&b=い"
string(29) "http://localhost/?a=あ&b=い"
							

最近の投稿