제목에 특정 html코드 못쓰게
본문
글제목에 html코드를 허용하고 있는데
제목란에 유튜브 iframe소스를 넣었더니 그 밑으로 오류가 쫙 생기네요ㅎ
그렇다고 모든 html코드를 제한하자니 좀 그렇고
<b></b>나 <font color="red"></font> 같이 글제목에 쓸만한 코드는 허용하되
iframe이나 링크 등은 제한하는 방법이 있을까요?
답변 3
* [스킨디렉토리]/write_update.head.skin.php (생성)
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// 제목에서 허용할 HTML 태그 목록
$allowed_title_tags = '<b><strong><font><i><em><u><s><span>';
// HTML 태그 필터링
if (isset($_POST['wr_subject'])) {
// 허용된 태그만 남기고 나머지는 모두 제거
$_POST['wr_subject'] = strip_tags($_POST['wr_subject'], $allowed_title_tags);
}
?>
※ 제목란에 HTML 코드를 허용하면서 특정 태그만 제한하고 싶으시다면,
서버 측에서 HTML 태그를 필터링하는 기능을 구현하는 것이 좋습니다.
예를 들어, 허용된 태그 목록만 유지하고 나머지 태그는 제거하는 방식으로
입력을 처리할 수 있습니다.
PHP에서는 strip_tags
함수에 허용 태그를 지정하거나,
HTML Purifier와 같은 라이브러리를 사용하는 방법도 있습니다.
이렇게 하면 <b>
나 <font>
등 허용된 태그는 유지하면서도
<iframe>
이나 <script>
같은 태그는 자동으로 제거되어
보안과 기능성을 동시에 확보할 수 있습니다.
<?php echo strip_tags($view['wr_subject'],'허용할태그'); ?>
예를들어서 font 만 허용할 경우
<?php echo strip_tags($view['wr_subject'],'<font>'); ?>
font 와 b 태그를 허용할경우
<?php echo strip_tags($view['wr_subject'],'<font><b>'); ?>
이렇게 넣으시면 됩니다.
위는 view.skin.php 를 기준으로 한것이기 때문에 게시판 리스트에서 하시려면
$view['wr_subject'] -> $list[$i]['wr_subject'] 이렇게 수정하시면 됩니다.
다른 방법으로는
htmlspecialchars 과 preg_replace 가 있습니다