function test(){
$str = <<<EOF
<span style="background-color: rgb(147, 52, 216); color: rgb(255, 255, 255);">HELLO WORLD</span>
EOF;
$html = "<html><body>";
$html .= form_open("common/test2");
$html .= form_hidden("msg", $str);
$html .= form_submit("go", "go");
$html .= form_close();
$html .= "</body></html>";
echo $html;
}
function test2(){
echo "1:".set_value("msg");
echo "2:".set_value("msg");
}
}
?>
test2 에서 set_value 의 결과를 출력하도록 하는데 분명히 동일한 함수 set_value를 호출했는데 결과값이 다르게 나오길래 찾다보니 CI 의 helper - form 의 form_prep 에 원인이 있네요.
form 의 submit 페이지에서 set_value 를 이용해서 form 의 값을 받는 방식을 사용하고 있었는데
set_value 로 값을 받을 경우, CI 에서 htmlspecialchars 를 자동으로 호출하고 그 결과값을 return 합니다.
그런데 set_value 를 첫번째 호출한 경우와 두번째 호출한 경우의 값이 왜 달라지나 알아보니
form_helper 의 form_prep 함수에서 다음과 같은 내용을 찾았습니다
// we've already prepped a field with this name
// @todo need to figure out a way to namespace this so
// that we know the *exact* field and not just one with
// the same name
if (isset($prepped_fields[$field_name]))
{
return $str;
}
$str = htmlspecialchars($str);
...
if ($field_name != '')
{
$prepped_fields[$field_name] = $str;
}
한번 prep 한 값은 다시 prep 를 하지 않기 위해 prep 했던 내용을 기록해두었던 것이어서 첫번째 호출시에는 htmlspecialchars 가 적용된 값이 return 되었던 것이고 두번째는 htmlspecialchars 를 적용하지 않은 값을 return 한 것입니다.
에디터의 경우 html 을 변환하지 말고 저장해야 하기 때문에 set_value 를 사용하지 말고 다른 방법으로 값을 받아야 겠네요.
set_value는 폼검증시 데이터를 복원하기 위한 역할을 합니다.
view에서 쓰는 것이구요.
mrthod에서는 $this->input->post()로 사용하셔야 합니다.