2012-02-27

Javascript string 변수 이용시 따옴표 사용

정말 3일을 꼬박 헤맨 것 같다. 이걸 알아내는 것이 참 어려운 일이구만. 뭐가 부족한지 알아내는 것도 어려운데 그걸 해결하는 건 더 어렵다^^

Javascript를 사용하다 보면 string 형태의 변수를 php와 script 사이에서 보내고 받고 하는 작업이 필요해진다. 그런데 html 상에서는 그냥 쓰면 되는 것이 Javascript나 php 내부에서는 특수문자가 포함된 것으로 받아들여져서 변수 전송이 안되는 경우가 많다. 특히 따옴표의 경우가 그런데, 현재의 상황은 따옴표가 포함된 string형태를 php에서 Javascript function을 통해서 html 페이지로 표시하고자 하는 경우에 해당된다.

결론은, 전송이 되지 않는다. 바로 쌍따옴표 때문인데 백슬래시를 사용해서 기호로 표시해도 (즉 "를 \") 안되는 것이 문법적 제한 때문이다.

1. html에서 Javascript function을 표시하려면 = 다음에 쌍따옴표로 넣어줘야 한다. 예를 들어 Javascript에 showValue(position, tstring)이라는 함수를 정의해서 html의 부분에 tstring을 집어넣는 함수가 있다고 하면 다음과 같이 써 줘야 겠다.
 
  <form onclick="showValue('main', 'value')" >

2. 이걸 php 안에서 쓰려면 쌍따옴표 앞에 \를 넣어줘야 한다.
 
  <php
      echo "<form onclick=\"showValue('main', 'value')\" > ;
   ?>

3. 여기에 특정한 string 형태를 보내기 위해서 value값을 다른 php 변수로 치환하면 다음과 같아진다.

   <php
      echo "<form onclick=\"showValue('main', '".$phpvalue."')\" > ;
   ?>

문제는 여기서 발생하는데, $phpvalue로 치환된 string형태의 변수 내에 쌍따옴표가 있으면 인식이 안되어 버리는 문제가 생긴다. 대표적으로 hyperlink 형태를 들 수가 있는데 다음과 같으면 변수 전송이 안된다.

  $phpvalue = "<a href="http://www.yahoo.com/">yahoo page</a>";

Hyperlink에 한정된 해결방법으로서, 다행히도 html이 hyperlink 내의 주소를 따옴표 없이도 인식을 한다. 즉 다음과 같이 고치면 작동한다.

  $phpvalue = "<a href=http://www.yahoo.com/>yahoo page</a>";


아마도 이것이 바른 해법은 아닐 것이다. 장기적으로는 php에서 javascript로 string 변수를 보낼 때 쌍따옴표를 보낼 방법을 연구해봐야 한다. html code로 바꾸어서 (예를 들면 <를 <처럼) 보내도 봤는데 이것도 작동을 안하니 hex code로 바꾸던가...

No comments:

Post a Comment