html 적용 문제 해결방안좀 알려주세요 채택완료
아래 함수를 실행하면 자동으로 test 게시판에
content.txt 내용 <-
안녕하세요
작성 되도록 했는데요
작성은 되는데 html 태그가
http://sir.kr/data/editor/2403/1028899349_1709467714.3496.png" />
이런식으로 깨져서 나옵니다.
해결 방법좀 알려주세요
소스
</p>
<p><?php
define('_INDEX_', true);
include_once('./_common.php');</p>
<p>function board_write($bo_table, $subject, $content, $mb_id)
{
global $g5;</p>
<p>$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;
}</p>
<p>$bo_table = "test"; // 게시판 테이블 입력
$filename = "subject.txt"; // 제목 파일
$fp = fopen($filename, "r");
$subject = fgets($fp, '50');
fclose($fp);</p>
<p>$filename = "content.txt"; // 내용 파일
$fp = fopen($filename, "r");
$content = htmlspecialchars_decode(fread($fp, filesize($filename)));
fclose($fp);</p>
<p>echo $content;</p>
<p>$mb_id="test"; // 작성자 id</p>
<p>$result = board_write($bo_table, $subject, $content, $mb_id);
?> </p>
<p>
답변 3개
수정된 부분을 참고해서 적용보세요
</p>
<p><?php
define('_INDEX_', true);
include_once('./_common.php');</p>
<p>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;
}</p>
<p>$bo_table = "test"; // 게시판 테이블 입력</p>
<p>$filename = "subject.txt"; // 제목 파일
$fp = fopen($filename, "r");
$subject = fgets($fp, '50');
fclose($fp);</p>
<p>$filename = "content.txt"; // 내용 파일
$fp = fopen($filename, "r");
$content = fread($fp, filesize($filename)); // htmlspecialchars_decode 함수 제거
fclose($fp);</p>
<p>$mb_id="test"; // 작성자 id
$result = board_write($bo_table, $subject, $content, $mb_id);
?>
답변에 대한 댓글 4개
[code]
// htmlspecialchars 함수 제거
$wr_content = trim($content);
wr_content = '$wr_content',
[/code]
위 부분을 찾아서 수정해 보세요
[code]
<?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);
?>
[/code]
댓글을 작성하려면 로그인이 필요합니다.
댓글을 작성하려면 로그인이 필요합니다.
다음과 같이 시도해 볼 수 있을 것 같습니다.
참고하셔서 원하시는 형식으로 구현 하시면 될 것 같습니다.
참고로 XSS 공격을 방지하기 위해 HTMLPurifier 라이브러리를 사용하시는게 좋을 듯합니다.
먼저, HTMLPurifier 라이브러리를 설치해야함. 그런 다음 아래와 같이 코드를 수정해 보세요
HTMLPurifier 라이브러리 설치는 필수사항이 아니므로 선택사항입니다.
라이브러리를 설치하지 않을시 require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php'; 이부분을 주석처리 또는 삭제 하시면 됩니다.
</p>
<p><?php
define('_INDEX_', true);
include_once('./_common.php');</p>
<p>// HTMLPurifier 라이브러리 경로 설정
require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';</p>
<p>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;
}</p>
<p>$bo_table = "test"; // 게시판 테이블 입력</p>
<p>$filename = "subject.txt"; // 제목 파일
$fp = fopen($filename, "r");
$subject = fgets($fp, '50');
fclose($fp);</p>
<p>$filename = "content.txt"; // 내용 파일
$fp = fopen($filename, "r");
$content = fread($fp, filesize($filename));
fclose($fp);</p>
<p>$mb_id="test"; // 작성자 id
$result = board_write($bo_table, $subject, $content, $mb_id);
?>
/path/to/htmlpurifier/library/HTMLPurifier.auto.php 경로는 HTMLPurifier 라이브러리의 실제 경로로 변경해야함.
답변에 대한 댓글 3개
[code]
// 저장된 내용 출력 시 HTML 해석
echo htmlspecialchars_decode($content);
?>
[/code]
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인