[PHP] URL 가져오기, 문자열 자르기, 자릿수 맞추기

Lpla

·

2021. 6. 17. 20:56

반응형

관련 포스팅

 

[PHP] 파일 하나로 여러 개의 페이지 사용하기

(그누보드 관련 포스팅을 할 계획이었는데, 막상 그누보드는 하나도 사용하지 않아서 php로 수정했다.) 일반적으로 웹사이트에서 한 페이지를 제작하기 위해 최소 파일 하나가 필요하다. 가령 ind

lpla.tistory.com

 

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

 

 

반응형