html_purifier 함수에 태그 를 추가하는 방법에 질문드려요.ㅜ
본문
안녕하세요.
저는 영카트 html_purifier 함수에 태그들과 기능들을 추가할려고 합니다.
그 이유는 팝업레이어[내용]에 다음과 같은 코딩이 되어 있는데요. 파일이름은 newwinform.php 이에요.
<td><?php echo editor_html('nw_content', get_text(html_purifier($nw['nw_content']), 0)); ?></td>
여기에 제가 다음과 같은 코딩을 하면
===============================================================
<?php
include_once('./_common.php');
?>
<form style="display:inline" id="fregisterform" name="fregisterform" action="http://localhost/......php" onsubmit="return fregisterform_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off">
<select name="a" id="a">
<option value="1">b</option>
<option value="2">c</option>
<option value="3">d</option>
</select>
<button type="submit" class="btn_submit" style="height:30px; width:300px;">가입하기</button>
<input type="hidden" id="mb_id" name="mb_id" value="<?php echo $member['mb_id'] ?>">
<input type="hidden" id="mb_name" name="mb_name" value="<?php echo $member['mb_name'] ?>">
<input type="hidden" id="mb_hp" name="mb_hp" value="<?php echo $member['mb_hp'] ?>">
==================================================================
위 모든 소스들이 다 사라지고 없습니다. b,c,d 만 나오는데 이것이 html_purifier 이 함수 때문에
그렇다고 하는데 이 함수는 다음과 같습니다. common.lib.php 에 있습니다.
function html_purifier($html)
{
$f = file(G5_PLUGIN_PATH.'/htmlpurifier/safeiframe.txt');
$domains = array();
foreach($f as $domain){
// 첫행이 # 이면 주석 처리
if (!preg_match("/^#/", $domain)) {
$domain = trim($domain);
if ($domain)
array_push($domains, $domain);
}
}
// 내 도메인도 추가
array_push($domains, $_SERVER['HTTP_HOST'].'/');
$safeiframe = implode('|', $domains);
include_once(G5_PLUGIN_PATH.'/htmlpurifier/HTMLPurifier.standalone.php');
include_once(G5_PLUGIN_PATH.'/htmlpurifier/extend.video.php');
$config = HTMLPurifier_Config::createDefault();
// data/cache 디렉토리에 CSS, HTML, URI 디렉토리 등을 만든다.
$config->set('Cache.SerializerPath', G5_DATA_PATH.'/cache');
$config->set('HTML.SafeEmbed', false);
$config->set('HTML.SafeObject', false);
$config->set('Output.FlashCompat', false);
$config->set('HTML.SafeIframe', true);
if( (function_exists('check_html_link_nofollow') && check_html_link_nofollow('html_purifier')) ){
$config->set('HTML.Nofollow', true); // rel=nofollow 으로 스팸유입을 줄임
}
$config->set('URI.SafeIframeRegexp','%^(https?:)?//('.$safeiframe.')%');
$config->set('Attr.AllowedFrameTargets', array('_blank'));
//유튜브, 비메오 전체화면 가능하게 하기
$config->set('Filter.Custom', array(new HTMLPurifier_Filter_Iframevideo()));
$purifier = new HTMLPurifier($config);
return $purifier->purify($html);
}
사라지는 form, select, option, button, input 태그들 및 <?php ?> 문을 살리기 위해서는
여기 html_purifier 함수에 추가를 해야하는 것 같은데 어떻게 추가해 하는지 도저히 찾아봐도 없어서 이렇게 선배님께 답변 부탁드립니다. ㅜㅜ 답변해 주시면 정말 고맙겠습니다.
답변 4
html_purifier를 빼셔야죠. html을 모두 제거하는 펑션인데. 현재 아래 문을 넣으면 모두 제거 됩니다.
즉 태그기능 추가는 그냥 함수를 빼고 쓰시는 것하고 똑같습니다.
$configuration->set('HTML.Allowed', 'form,select,option,button,input');
이렇게 한 줄 추가후 테스트해 보시죠.
html_purifier 함수 말고 get_text 함수 쪽을 확인해 보셔야 될 것 같습니다.
php가 실행되면서 echo를 해석해서 뒤에 있는 문장을 뿌져 줍니다.
그러면 이미 php가 파싱한 부분은 넘어갔기 때문에 어떤 코드를 뿌려도 php코드는 실행이 안됩니다.
파싱이 된 후에 로컬로 내려와 진다고 하면, 그 다음에는 자바스크립트 영역이 될 것입니다.
안되는 것을 붙잡고 있질 말고, 어떤 것을 구현하고 싶은지에 대해서 문의를 하는 것이 더 빠를 수도 있습니다.
고수님들이 비슷한 것을 바로 찾아 줄수도 있으니까요...