분류사용할때 한글이 주소창에 그대로.... 정보
분류사용할때 한글이 주소창에 그대로....본문
흠.. 이상한 일이 발생했습니다.
제가 뭘 못보고 안한거 같은데...
일단 게시판 설정에서 분류를 서울|인천|대전|광주|부산|울산
이런식으로 써 넣고 list 페이지에서 분류를 선택했을때
select 창에 onchange="location='<?=$category_option?>'+this.value;"
라고 써있는 부분을 주소창에 %BA%CD 머 이런식으로 나오기 위해서 스크립트 뒤에
onchange="location='<?=$category_option?>'+encodeURI(this.value);"
요런식으로 바꿨습니다.. 문제는 여기서부터..
정렬을 시켰는데 아무것도 안나오길래 php 에서 urlencode 를 써서 두개를 비교했습니다..
일단 목록에서 카테고리명을 클릭했을때 주소창엔 %B4%EB%C0%FC%C1%A1 식으로 뜹니다.
같은 문자로 인코드 해봐도 똑같이 %B4%EB%C0%FC%C1%A1 << 요게 나오는데
onchange="location='<?=$category_option?>'+encodeURI(this.value);"
식으로 했을땐 %EB%8C%80%EC%A0%84%EC%A0%90 << 요롷게 바뀌어서 나오네요..
이유가 뭘까요?
제가 뭘 못보고 안한거 같은데...
일단 게시판 설정에서 분류를 서울|인천|대전|광주|부산|울산
이런식으로 써 넣고 list 페이지에서 분류를 선택했을때
select 창에 onchange="location='<?=$category_option?>'+this.value;"
라고 써있는 부분을 주소창에 %BA%CD 머 이런식으로 나오기 위해서 스크립트 뒤에
onchange="location='<?=$category_option?>'+encodeURI(this.value);"
요런식으로 바꿨습니다.. 문제는 여기서부터..
정렬을 시켰는데 아무것도 안나오길래 php 에서 urlencode 를 써서 두개를 비교했습니다..
일단 목록에서 카테고리명을 클릭했을때 주소창엔 %B4%EB%C0%FC%C1%A1 식으로 뜹니다.
같은 문자로 인코드 해봐도 똑같이 %B4%EB%C0%FC%C1%A1 << 요게 나오는데
onchange="location='<?=$category_option?>'+encodeURI(this.value);"
식으로 했을땐 %EB%8C%80%EC%A0%84%EC%A0%90 << 요롷게 바뀌어서 나오네요..
이유가 뭘까요?
댓글 전체
제가 알기로 자바스크립트의 encodeURL 동작이 조금다른데
<script>
function UrlEncode(str){
var ret="";
var strSpecial="!"#$%&'()*+,/:;<=>?[]^`{|}~%";
for(var i=0;i<str.length;i++){
var chr = str.charAt(i);
var c=str2asc(chr);
tt += chr+":"+c+"n";
if(parseInt("0x"+c) > 0x7f){
ret+="%"+c.slice(0,2)+"%"+c.slice(-2);
}else{
if(chr==" ")
ret+="+";
else if(strSpecial.indexOf(chr)!=-1)
ret+="%"+c.toString(16);
else
ret+=chr;
}
}
return ret;
}
</script>
위에것을 써서
UrlEncode(this.value) 로 변경해보세요
<script>
function UrlEncode(str){
var ret="";
var strSpecial="!"#$%&'()*+,/:;<=>?[]^`{|}~%";
for(var i=0;i<str.length;i++){
var chr = str.charAt(i);
var c=str2asc(chr);
tt += chr+":"+c+"n";
if(parseInt("0x"+c) > 0x7f){
ret+="%"+c.slice(0,2)+"%"+c.slice(-2);
}else{
if(chr==" ")
ret+="+";
else if(strSpecial.indexOf(chr)!=-1)
ret+="%"+c.toString(16);
else
ret+=chr;
}
}
return ret;
}
</script>
위에것을 써서
UrlEncode(this.value) 로 변경해보세요
스크립트가 뭔가;;;
ㅠㅠ 제가 스크립트는 젠병이라..
그리고 스크립트에서 바로 이동되야 하는데 location.href나 location 이런 문구가 없이 리턴되면 그 인코딩된 문자만 ret에 들어가는거 아닌가요? ㅠㅠ자세히.. 부탁드려요 ㅠㅠ
아.. 참고로 euc-kr용입니다.
ㅠㅠ 제가 스크립트는 젠병이라..
그리고 스크립트에서 바로 이동되야 하는데 location.href나 location 이런 문구가 없이 리턴되면 그 인코딩된 문자만 ret에 들어가는거 아닌가요? ㅠㅠ자세히.. 부탁드려요 ㅠㅠ
아.. 참고로 euc-kr용입니다.
<?
$ca_menu = explode("|",$board[bo_category_list]);
for ($i=0; $i<count($ca_menu); $i++) {
echo "<option value=".urlencode($ca_menu[$i]).">$ca_menu[$i]</option> ";
}
?>
일단 이 소스로 해결했습니다...
그런데.. 이게.. 정렬이 되면 select 창에 분류명 그대로 남아있어야 하는데 그게 안되있네요 ㅠㅠ
우찌해야 될까요 ㅠㅠ
$ca_menu = explode("|",$board[bo_category_list]);
for ($i=0; $i<count($ca_menu); $i++) {
echo "<option value=".urlencode($ca_menu[$i]).">$ca_menu[$i]</option> ";
}
?>
일단 이 소스로 해결했습니다...
그런데.. 이게.. 정렬이 되면 select 창에 분류명 그대로 남아있어야 하는데 그게 안되있네요 ㅠㅠ
우찌해야 될까요 ㅠㅠ
common.php 에서 mysql_real_escape_string()를 해줘서 생기는 문제 같습니다.
SQL Injection 막을려고 한거 같은데 위치가 잘못된듯...흠...
SQL Injection 막을려고 한거 같은데 위치가 잘못된듯...흠...