테스트 사이트 - 개발 중인 베타 버전입니다

html 적용 문제 해결방안좀 알려주세요 채택완료

1년 전 조회 2,029

아래 함수를 실행하면 자동으로 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개

채택된 답변
+20 포인트

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

</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개

안되네요 그 글쓰기에서 html 적용되게 안될까요? 그러면 처리될꺼같은데
다음과 같이 수정해 보시겠어요?
[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개

했는데여 그 글은 써졌는데 내용보니까 그냥
<p>안녕하세요</p>
이렇게 나오네요
다음과 같이 하단에 추가해 보시는건 어떨까 합니다.
[code]

// 저장된 내용 출력 시 HTML 해석
echo htmlspecialchars_decode($content);
?>

[/code]
내용은 잘출력 됩니다. 다만 게시판에 내용에서는 html이 적용이 안됩니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인

전체 질문 목록

🐛 버그신고