티스의 이야기

URL의 일부분에 한국어 사용 본문

프로그래밍

URL의 일부분에 한국어 사용

밍딩이 2016. 6. 30. 14:29

URL의 일부분에 한국어 사용


RFC 3986을 기초로하여 인코딩하는 rawurlencode() 함수



rawurlencode() 함수로 URL 인코딩하면 <a> 태그의 href 속성에 한국어를 포함한 값을 전달하거나 'index.php?search=문자열'과 같은 쿼리(query) 문자열에 한국어를 이용할 수 있습니다


쿼리 문자열 등 HTTP 요청에서 받은 데이터는 PHP에 의해 자동으로 디코딩되므로 특별히 처리하지 않고 그대로 이용할 수 있습니다.

URL 인코딩된 후 파일 등에 저장된 데이터를 다시 꺼냈을 때 자동으로 디코딩되지 않기 때문에 rawurlencode() 함수가 있습니다. 이들 함수의 차이는 싱글 바이트 공백과 '~'의 인코딩으로 urlencode() 함수에서는 각각 '+'와 '%7E'가 되고 rawurlencode() 함수에서는 '%20', '~'가 됩니다(PHP 5.3 이후 rawurlencode() 함수는 RFC 3986에 따라 '~'을 인코딩하지 않습니다). Web API 등에서는 RFC 3986에서 URL 인코딩이 요구되는 경우가 많으므로 다음의 예제에서는 rawurlencode() 함수를 사용하고 있습니다.



<!DOCTYPE html>

<html lang="ko">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width,initial-scale=1.0">

<title>URL의 일부분에 한국어를 이용하고 싶을 때</title>

</head>

<body>

<div>

<form method="get" action="urlencode.php">

<p>문자열을 입력하고 링크를 클릭합니다<br>

<input type="text" name="data">

<input type="submit" value="전송">

</p>

</form>

<?php

// h() 함수 레시피 218를 불러옵니다 레시피 041.

require_once '../../../../lib/h.php';


if (isset($_GET['data'])) {

$string = $_GET['data'];


// URL을 인코딩합니다.

$urlEncode = rawurlencode($_GET['data']);

$url = $_SERVER['SCRIPT_NAME'] . '?data2=' . $urlEncode;

echo '처리 전 문자열: ' . h($string) . '<br>';

echo '인코딩 처리 후: ' . h($urlEncode) . '<br>';

echo '<a href="' . h($url) . '">링크</a>';

}


if (isset($_GET['data2'])) {

$string = $_GET['data2'];

echo '디코딩 처리 후: ' . h($string);

}

?>

</div>

</body>

</html>


Comments