[PHP] URL 가져오기, 문자열 자르기, 자릿수 맞추기
Lpla
·2021. 6. 17. 20:56
1. URL 가져오기
다음 URL이 있다고 가정하자.
https://example.com/page.php?mn01=5_1
이 URL은 네 가지로 분류할 수 있다.
- example.com
- page.php
- mn01
- 5_1
그리고 php로 각각을 구하는 방법은 다음과 같다.
<?php echo $_SERVER['HTTP_HOST']; ?> // example.com
<?php echo $_SERVER['REQUEST_URI']; ?> // /page.php?mn01=5_1
<?php $array = explode("=", $_SERVER['QUERY_STRING']); ?>
<?php echo $_SERVER["PHP_SELF"]; ?> // /page.php
<?php echo $array[0]; ?> // mn01
<?php echo $array[1]; ?> // 5_1
슬래시를 빼고 구하고 싶다면 basename()을 사용한다.
<?php echo basename($_SERVER['REQUEST_URI']); ?> // page.php?mn01=5_1
<?php echo basename($_SERVER["PHP_SELF"]); ?> // page.php
2, 문자열 자르기
위 URL 중에서 5_1 부분을 5와 1 각각 따로 구하고 싶을 때는 어떻게 해야 할까?
지난 번에 배운 substr()을 사용할 수도 있다.
<?php echo substr($_SERVER['QUERY_STRING'], 5, 1); ?> // 5
<?php echo substr($_SERVER['QUERY_STRING'], 7, 1); ?> // 1
하지만 이 방식에는 치명적인 단점이 하나 존재한다.
만약 https://example.com/page.php?mn01=5_1 에서 substr($_SERVER['QUERY_STRING'], 5, 1); 값은 5다.
하지만 https://example.com/page.php?mn01=12_1 에서 substr($_SERVER['QUERY_STRING'], 5, 1); 값은 1이다.
두번째 URL에서 우리가 원하는 값은 12인데 1만 반환한다.
5번째 자리에서 한 개만 반환하기 때문에 그런 것이다.
자릿수가 다르더라도 값을 제대로 반환하기 위해서는 substr() 대신 preg_split()를 사용해야 한다.
<?php $url = preg_split('/\=|\_/',$_SERVER['QUERY_STRING']); ?>
<?php echo $url[0] ?> // mn01
<?php echo $url[1] ?> // 12
<?php echo $url[2] ?> // 1
preg_split()는 정규표현식으로 문자열을 나누는 함수다.
preg_split('/\=|\_/',$_SERVER['QUERY_STRING']);
즉 = 혹은 _ 을 기준으로 문자열을 나눈다.
따라서 mn01, 12, 1 세 가지가 배열에 담긴다.
이제 자릿수가 두 자리든 다섯 자리든 문제 없이 원하는 문자열을 얻을 수 있다.
3. 자릿수 맞추기
URL에서 한 자리 숫자를 반환했지만 두 자리로 변환해야 하는 경우도 있다.
// https://example.com/page.php?mn01=5_1
<?php $url = preg_split('/\=|\_/',$_SERVER['QUERY_STRING']); ?>
<?php echo $url[1] ?> // 5
만약 5가 아닌 두 자리수 05를 얻고 싶다면 sprintf() 함수를 사용하면 해결할 수 있다.
<?php echo sprintf('%02d',$url[1]); ?> // 05
<?php echo sprintf('%03d',$url[1]); ?> // 005