html 적용 문제 해결방안좀 알려주세요

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
html 적용 문제 해결방안좀 알려주세요

QA

html 적용 문제 해결방안좀 알려주세요

본문

아래 함수를 실행하면 자동으로 test 게시판에


content.txt 내용 <- <p>안녕하세요</p>

작성 되도록 했는데요

 

작성은 되는데 html 태그가

1028899349_1709467714.3496.png

이런식으로 깨져서 나옵니다.

해결 방법좀 알려주세요

 

소스

 


<?php
define('_INDEX_', true);
include_once('./_common.php');
function board_write($bo_table, $subject, $content, $mb_id) 
{
global $g5;
$mb = get_member($mb_id); 
$write_table = "g5_write_{$bo_table}";
$wr_num = get_next_num($write_table);
$wr_reply = '';
$ca_name = "";
$html = ""; $secret=""; $mail = "";
$wr_subject = addslashes(trim($subject));
$wr_content = htmlspecialchars(trim($content), ENT_QUOTES, 'UTF-8', false);
$wr_link1 = "";
$wr_link2 = "";
$wr_email = "";
$wr_name = addslashes($bo["bo_use_name"] ? $mb["mb_name"] : $mb["mb_nick"]);
 
$sql = " insert into $write_table
set wr_num = '$wr_num',
wr_reply = '$wr_reply',
wr_comment = 0,
ca_name = '$ca_name',
wr_option = '$html,$secret,$mail',
wr_subject = '$wr_subject',
wr_content = '$wr_content',
wr_link1 = '$wr_link1',
wr_link2 = '$wr_link2',
wr_link1_hit = 0,
wr_link2_hit = 0,
wr_hit = 0,
wr_good = 0,
wr_nogood = 0,
mb_id = '$mb_id',
wr_password = '',
wr_name = '$wr_name',
wr_email = '$wr_email',
wr_homepage = '',
wr_datetime = '".G5_TIME_YMDHIS."',
wr_last = '".G5_TIME_YMDHIS."',
wr_ip = '{$_SERVER['REMOTE_ADDR']}',
wr_1 = '',
wr_2 = '',
wr_3 = '',
wr_4 = '',
wr_5 = '',
wr_6 = '',
wr_7 = '',
wr_8 = '',
wr_9 = '',
wr_10 = '' ";
sql_query($sql);
$wr_id = sql_insert_id();
sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' ");
sql_query(" insert into {$g5['board_new_table']} ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '{$bo_table}', '{$wr_id}', '{$wr_id}', '".G5_TIME_YMDHIS."', '$mb_id' ) ");
sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '{$bo_table}'");
return true;
}
$bo_table = "test"; // 게시판 테이블 입력
 
$filename = "subject.txt"; // 제목 파일
$fp = fopen($filename, "r");
$subject = fgets($fp, '50');
fclose($fp);
$filename = "content.txt"; // 내용 파일
$fp = fopen($filename, "r");
$content = htmlspecialchars_decode(fread($fp, filesize($filename)));
fclose($fp);
echo $content;
$mb_id="test"; // 작성자 id
$result =  board_write($bo_table, $subject, $content, $mb_id);
?> 

이 질문에 댓글 쓰기 :

답변 3

수정된 부분을 참고해서 적용보세요


<?php
define('_INDEX_', true);
include_once('./_common.php');
function board_write($bo_table, $subject, $content, $mb_id) 
{
    global $g5;
    $mb = get_member($mb_id); 
    $write_table = "g5_write_{$bo_table}";
    $wr_num = get_next_num($write_table);
    $wr_reply = '';
    $ca_name = "";
    $html = ""; $secret=""; $mail = "";
    $wr_subject = addslashes(trim($subject));
    // htmlspecialchars 함수 제거
    $wr_content = trim($content);
    $wr_link1 = "";
    $wr_link2 = "";
    $wr_email = "";
    $wr_name = addslashes($bo["bo_use_name"] ? $mb["mb_name"] : $mb["mb_nick"]);
     
    $sql = " insert into $write_table
    set wr_num = '$wr_num',
    wr_reply = '$wr_reply',
    wr_comment = 0,
    ca_name = '$ca_name',
    wr_option = '$html,$secret,$mail',
    wr_subject = '$wr_subject',
    wr_content = '$wr_content',
    wr_link1 = '$wr_link1',
    wr_link2 = '$wr_link2',
    wr_link1_hit = 0,
    wr_link2_hit = 0,
    wr_hit = 0,
    wr_good = 0,
    wr_nogood = 0,
    mb_id = '$mb_id',
    wr_password = '',
    wr_name = '$wr_name',
    wr_email = '$wr_email',
    wr_homepage = '',
    wr_datetime = '".G5_TIME_YMDHIS."',
    wr_last = '".G5_TIME_YMDHIS."',
    wr_ip = '{$_SERVER['REMOTE_ADDR']}',
    wr_1 = '',
    wr_2 = '',
    wr_3 = '',
    wr_4 = '',
    wr_5 = '',
    wr_6 = '',
    wr_7 = '',
    wr_8 = '',
    wr_9 = '',
    wr_10 = '' ";
    sql_query($sql);
    $wr_id = sql_insert_id();
    sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' ");
    sql_query(" insert into {$g5['board_new_table']} ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '{$bo_table}', '{$wr_id}', '{$wr_id}', '".G5_TIME_YMDHIS."', '$mb_id' ) ");
    sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '{$bo_table}'");
    return true;
}
$bo_table = "test"; // 게시판 테이블 입력
$filename = "subject.txt"; // 제목 파일
$fp = fopen($filename, "r");
$subject = fgets($fp, '50');
fclose($fp);
$filename = "content.txt"; // 내용 파일
$fp = fopen($filename, "r");
$content = fread($fp, filesize($filename)); // htmlspecialchars_decode 함수 제거
fclose($fp);
$mb_id="test"; // 작성자 id
$result =  board_write($bo_table, $subject, $content, $mb_id);
?>

이렇게 수정해 보시겠어요?


<?php
define('_INDEX_', true);
include_once('./_common.php');

function board_write($bo_table, $subject, $content, $mb_id) 
{
    global $g5;
    $mb = get_member($mb_id); 
    $write_table = "g5_write_{$bo_table}";
    $wr_num = get_next_num($write_table);
    $wr_reply = '';
    $ca_name = "";
    $html = ""; $secret=""; $mail = "";
    $wr_subject = addslashes(trim($subject));
    // htmlspecialchars 함수 제거
    $wr_content = trim($content);
    $wr_link1 = "";
    $wr_link2 = "";
    $wr_email = "";
    $wr_name = addslashes($bo["bo_use_name"] ? $mb["mb_name"] : $mb["mb_nick"]);
     
    $sql = " insert into $write_table
    set wr_num = '$wr_num',
    wr_reply = '$wr_reply',
    wr_comment = 0,
    ca_name = '$ca_name',
    wr_option = '$html,$secret,$mail',
    wr_subject = '$wr_subject',
    wr_content = '$wr_content',
    wr_link1 = '$wr_link1',
    wr_link2 = '$wr_link2',
    wr_link1_hit = 0,
    wr_link2_hit = 0,
    wr_hit = 0,
    wr_good = 0,
    wr_nogood = 0,
    mb_id = '$mb_id',
    wr_password = '',
    wr_name = '$wr_name',
    wr_email = '$wr_email',
    wr_homepage = '',
    wr_datetime = '".G5_TIME_YMDHIS."',
    wr_last = '".G5_TIME_YMDHIS."',
    wr_ip = '{$_SERVER['REMOTE_ADDR']}',
    wr_1 = '',
    wr_2 = '',
    wr_3 = '',
    wr_4 = '',
    wr_5 = '',
    wr_6 = '',
    wr_7 = '',
    wr_8 = '',
    wr_9 = '',
    wr_10 = '' ";
    sql_query($sql);
    $wr_id = sql_insert_id();
    sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' ");
    sql_query(" insert into {$g5['board_new_table']} ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '{$bo_table}', '{$wr_id}', '{$wr_id}', '".G5_TIME_YMDHIS."', '$mb_id' ) ");
    sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '{$bo_table}'");
    return true;
}

$bo_table = "test"; // 게시판 테이블 입력

$filename = "subject.txt"; // 제목 파일
$fp = fopen($filename, "r");
$subject = fgets($fp, '50');
fclose($fp);

$filename = "content.txt"; // 내용 파일
$fp = fopen($filename, "r");
$content = fread($fp, filesize($filename)); // htmlspecialchars_decode 함수 제거
fclose($fp);

$mb_id="test"; // 작성자 id
$result =  board_write($bo_table, $subject, $content, $mb_id);
?>

다음과 같이 시도해 볼 수 있을 것 같습니다.

참고하셔서 원하시는 형식으로 구현 하시면 될 것 같습니다.

참고로 XSS 공격을 방지하기 위해 HTMLPurifier 라이브러리를 사용하시는게 좋을 듯합니다.

먼저, HTMLPurifier 라이브러리를 설치해야함. 그런 다음 아래와 같이 코드를 수정해 보세요

HTMLPurifier 라이브러리 설치는 필수사항이 아니므로 선택사항입니다.

라이브러리를 설치하지 않을시 require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php'; 이부분을 주석처리 또는 삭제 하시면 됩니다.


<?php
define('_INDEX_', true);
include_once('./_common.php');
// HTMLPurifier 라이브러리 경로 설정
require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';
function board_write($bo_table, $subject, $content, $mb_id) {
    global $g5;
    $mb = get_member($mb_id); 
    $write_table = "g5_write_{$bo_table}";
    $wr_num = get_next_num($write_table);
    $wr_reply = '';
    $ca_name = "";
    $html = ""; $secret=""; $mail = "";
    $wr_subject = addslashes(trim($subject));
    // HTMLPurifier로 content 필드 정제
    $config = HTMLPurifier_Config::createDefault();
    $purifier = new HTMLPurifier($config);
    $wr_content = $purifier->purify($content);
    $wr_link1 = "";
    $wr_link2 = "";
    $wr_email = "";
    $wr_name = addslashes($bo["bo_use_name"] ? $mb["mb_name"] : $mb["mb_nick"]);
     
    $sql = " insert into $write_table
    set wr_num = '$wr_num',
    wr_reply = '$wr_reply',
    wr_comment = 0,
    ca_name = '$ca_name',
    wr_option = '$html,$secret,$mail',
    wr_subject = '$wr_subject',
    wr_content = '$wr_content',
    wr_link1 = '$wr_link1',
    wr_link2 = '$wr_link2',
    wr_link1_hit = 0,
    wr_link2_hit = 0,
    wr_hit = 0,
    wr_good = 0,
    wr_nogood = 0,
    mb_id = '$mb_id',
    wr_password = '',
    wr_name = '$wr_name',
    wr_email = '$wr_email',
    wr_homepage = '',
    wr_datetime = '".G5_TIME_YMDHIS."',
    wr_last = '".G5_TIME_YMDHIS."',
    wr_ip = '{$_SERVER['REMOTE_ADDR']}',
    wr_1 = '',
    wr_2 = '',
    wr_3 = '',
    wr_4 = '',
    wr_5 = '',
    wr_6 = '',
    wr_7 = '',
    wr_8 = '',
    wr_9 = '',
    wr_10 = '' ";
    sql_query($sql);
    $wr_id = sql_insert_id();
    sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' ");
    sql_query(" insert into {$g5['board_new_table']} ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '{$bo_table}', '{$wr_id}', '{$wr_id}', '".G5_TIME_YMDHIS."', '$mb_id' ) ");
    sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '{$bo_table}'");
    return true;
}
$bo_table = "test"; // 게시판 테이블 입력
$filename = "subject.txt"; // 제목 파일
$fp = fopen($filename, "r");
$subject = fgets($fp, '50');
fclose($fp);
$filename = "content.txt"; // 내용 파일
$fp = fopen($filename, "r");
$content = fread($fp, filesize($filename));
fclose($fp);
$mb_id="test"; // 작성자 id
$result =  board_write($bo_table, $subject, $content, $mb_id);
?>

/path/to/htmlpurifier/library/HTMLPurifier.auto.php 경로는 HTMLPurifier 라이브러리의 실제 경로로 변경해야함.

답변을 작성하시기 전에 로그인 해주세요.
전체 178
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT