[PHP] GET방식으로 parameter 전달 시 space(공백) 포함하기

2024. 5. 11. 18:26정보보안 및 해킹/웹 개발

필자는 게시판을 만들다가 DB중 title을 기준으로 해서 쿼리문을 구성하고 있었는데,

title 중에 공백(스페이스바)가 포함된 문자열이 제법 많았다.

그런데 GET방식으로 parameter를 전달하다가 공백 앞에서 문자열이 끊겨 공백 앞 문자열까지만 전달이 되었다.

그래서 해결 방안을 모색했고, 해당 해결 방안은

공백을 인코딩하여 parameter를 전송하는 것이었다.

공백은 %20으로 인코딩이 된다 

php에서는 해당 과정을 아주 쉽게 사용할 수 있도록 구현해 놓은 것이 있었는데, 그것이 바로

urlencode() 함수였다.

적용 전 코드와 적용 후 코드의 차이를 살펴보자.

 

적용 전 코드

$writer = $sql_row['writer'];
    $writed_date =$sql_row['writed_date'];
    $title = $sql_row['title'];

   echo "<a href=$url?writer=" . $writer . "&writed_date=" . $writed_date . "&title=" . $title . ">";
    echo "<strong>" . $sql_row['title'] . "</strong><br>";
    echo "</a>";

실제 타이틀
전송 후 도출된 타이틀

안돼 내 레미제라블이 레가 되다니

 

 

적용 후 코드 (혹시나 다른 것에도 공백이 있을까봐 전부 urlencode를 넣어줬다)

$writer = urlencode($sql_row['writer']);
    $writed_date = urlencode($sql_row['writed_date']);
    $title = urlencode($sql_row['title']);

   echo "<a href=$url?writer=" . $writer . "&writed_date=" . $writed_date . "&title=" . $title . ">";
    echo "<strong>" . $sql_row['title'] . "</strong><br>";
    echo "</a>";

코드를 변경한 후 재전송하여 도출된 타이틀

레미제라블.. 돌아왔구나...!