xe 관련 질문해도 되나요?
조회수 4660 답변수 4 반응수 4 등록일 2016.05.24 05:07:54

htmlspecialchars() 함수를 사용 하셔도 됩니다.

  1. $tags = htmlspecialchars($obj->tags);

http://colorscripter.com/s/Xq0Rzft


2016.06.02 01:32:04 반응 이력
안되네요.. 안녕하세요 2016.06.03 16:19:06

코드 스나이퍼 보면

$ett = array ("<" => "<", ">" => ">", "\\\"" => """", "\'" => "'" );

에 등록되어 있네요

이게 아니고 아래 처럼 &가 들어가 있는 코드로 넣어주세요


$ett = array ("<" => "&lt;", ">" => "&gt;", "\\\"" => "&quot;", "\'" => "&apos;" );


2016.05.27 11:47:19 반응 이력

xe의 코어를 수정한다는게 좋은 방향은 아니지만 코어를 개조했다고 하셔서 ..

아래처럼 해당 파일을 수정해 보세요


xe 디렉토리 최상위에서 


/modules/tag/tag.controller.php  라인 42

아래는 xe 버전 1.7.3.7 의 원본 triggerInsertTag 함수 코드 입니다.

  1. function triggerInsertTag(&$obj)
  2.     {
  3.         $module_srl = $obj->module_srl;
  4.         $document_srl = $obj->document_srl;
  5.         $tags = $obj->tags;
  6.         if(!$document_srl) return new Object();
  7.         // Remove all tags that article
  8.         $output = $this->triggerDeleteTag($obj);
  9.         if(!$output->toBool()) return $output;
  10.         // Re-enter the tag
  11.         $args = new stdClass();
  12.         $args->module_srl = $module_srl;
  13.         $args->document_srl = $document_srl;
  14.  
  15.         $tag_list = explode(',',$tags);
  16.         $tag_count = count($tag_list);
  17.         for($i=0;$i<$tag_count;$i++)
  18.         {
  19.             unset($args->tag);
  20.             $args->tag = trim($tag_list[$i]);
  21.             if(!$args->tag) continue;
  22.             $output = executeQuery('tag.insertTag', $args);
  23.             if(!$output->toBool()) return $output;
  24.         }
  25.  
  26.         return new Object();
  27.     }


자 이제 위의 원본 코드를 아래 처럼 수정해보세요


  1. {
  2.  #치환할 HTML 엔티티
  3.  $ett = array ("<" => "&lt;", ">" => "&gt;", "\\\"" => "&quot;", "\'" => "&apos;" );
  4.  
  5.  $module_srl = $obj->module_srl;
  6.  $document_srl = $obj->document_srl;
  7.  
  8.  #foreach로 태그의 문자열을 치환한다.
  9.  foreach ($ett as $k => $v) {
  10.  $obj->tags = str_replace($k, $v, $obj->tags);
  11.  }
  12.  $tags = $obj->tags;
  13.  
  14.  if(!$document_srl) return new Object();
  15.  // Remove all tags that article
  16.  $output = $this->triggerDeleteTag($obj);
  17.  if(!$output->toBool()) return $output;
  18.  // Re-enter the tag
  19.  $args = new stdClass();
  20.  $args->module_srl = $module_srl;
  21.  $args->document_srl = $document_srl;
  22.  
  23.  
  24.  $tag_list = explode(',',$tags);
  25.  $tag_count = count($tag_list);
  26.  for($i=0;$i<$tag_count;$i++)
  27.  {
  28.  unset($args->tag);
  29.  $args->tag = trim($tag_list[$i]);
  30.  if(!$args->tag) continue;
  31.  $output = executeQuery('tag.insertTag', $args);
  32.  if(!$output->toBool()) return $output;
  33.  }
  34.  
  35.  
  36.  return new Object();
  37.  }

  38.  


단순히 설명 드리면 DB Insert 시 치환하여 입력되게 됩니다.

건투를 빕니다.




2016.05.25 01:20:15 반응 이력
http://colorscripter.com/s/R2Yw1af 이거 역시도 안됩니다.. $ett = array (&quot;&lt;&quot; =&gt; &quot;&lt;&quot;, &quot;&gt;&quot; =&gt; &quot;&gt;&quot;, &quot;\&quot;&quot; =&gt; &quot;&quot;&quot;, &quot;\'&quot; =&gt; &quot;'&quot; ); 아래의 코드는 모두 텍스트로 인식이 되버리고 죽어버리고 적용이 안됩니다. 또한 http://colorscripter.com/s/R2Yw1af 이 코드 적용시 글 등록이 안되는 버그까지 생겨버립니다.. 안녕하세요 2016.06.03 16:36:36
http://colorscripter.com/s/R2Yw1af 위 코드스나이퍼에서 확인해주세요~ John.cho 2016.06.02 01:19:44
$ett = array ("&lt;" =&gt; "&lt;", "&gt;" =&gt; "&gt;", "&quot;" =&gt; """, "'" =&gt; "'" ); 배열안에 value값들이 & 로 되어 있는 값으로 넣어주세요 이게 어떻게 하라는것인지 이해를 못하겠습니다.. 안녕하세요 2016.05.28 11:14:03
위의 코드 스나이퍼를 보면 아래처럼 등록되어 있네요 $ett = array ("&lt;" =&gt; "&lt;", "&gt;" =&gt; "&gt;", "\&quot;" =&gt; """, "'" =&gt; "'" ); 배열안에 value값들이 & 로 되어 있는 값으로 넣어주세요 John.cho 2016.05.27 11:44:50

삭제된 댓글입니다.

http://colorscripter.com/s/hDycJEm 이렇게 바꿔줘도 태그에 스크립트 입력시 여전히 적용 되네요... ㅠㅠ 2016.05.27 10:56:17
애구구.. 글을 작성할 떄 웹의 에디터에서 변환해 버리네요.. 다시 수정했습니다. 확인해주세요~~ 2016.05.26 23:35:14

삭제된 댓글입니다.

아래 코드로 바꾸어 주었을때 게시글 등록 버튼이 안눌립니다. http://colorscripter.com/s/h1mb4cY 변경전 http://colorscripter.com/s/1rvyyZ8 변경후 변경전과 변경후의 차이는 변경전에는 function triggerInsertTag(&$obj) 아래의 태그가 잘먹히는데 보시다시피 변경후에는 function triggerInsertTag(&$obj) 아래의 코드는 모두 텍스트로 인식이 되버리고 죽어버리고 적용이 안됩니다. 2016.05.26 21:13:25

당연히 되지요! 다만 xe 관련한 고수들이 있을지 의문이지만요..

질문해 주신 내용만 보면 디비에 데이터 입력 시 html 엔티티로 치환을 하지 않아 발생한 문제로 보여집니다.


$ett = array ("<" => "&lt;", ">" => "&gt;", "\\\"" => "&quot;"", "\'" => "&apos;" );

  1. foreach ($ett as $k => $v) {
  2.     $str = str_replace($k, $v, $str);
  3. }

스케치북 모듈에서 디비에 데이터 입력 시 위와 같이 치환을 해주세요~

2016.05.24 09:59:28 반응 이력
답변해주시면 감사하겠습니다.. ㅠㅠ $ett = array ("&lt;" =&gt; "&lt;", "&gt;" =&gt; "&gt;", """ =&gt; """, "'" =&gt; "'" ); 배열안에 value값들이 & 로 되어 있는 값으로 넣어주세요 이게 어떻게 하라는것인지 이해를 못하겠습니다.. .. 안녕하세요 2016.06.01 23:35:36
제가 이해한게 맞나요? 게시판 쓰기 에서 태그 입력란에 ex) &lt;script&gt;alert('1')&lt;/script&gt; 로 등록시 페이지 로딩될때마다 script가 실행된다는 말씀이신거죠? John.cho 2016.05.25 00:42:47
우선 답변 정말 감사드립니다.. 근데.. 정말 정말 죄송하지만.. 제가 컴맹수준이라.. ftp 파일에서 어느파일안에 대략 몇번째줄인지좀 알수있을까요..? 어디를 고쳐줘야할지 모르겠습니다..ㅠㅠㅠ 안녕하세요 2016.05.24 21:51:30

답변 작성

질문에 적합한 답변을 상세히 작성해 주시기 바랍니다.

답변이 찬성되면 태그평판 +2점이 적립, 반대되면 태그평판 -1점 차감됩니다.

답변이 채택되면 태그평판 +10점이 적립됩니다.

etc 게시판 정보
  • 2k
    질문수
  • 123
    아카이브수
  • 46
    채택수
  • 0
    멤버수
etc 질문 통계
최근 30일
답변율
0%
채택율
0%
전체
답변율
2%
채택율
2%
최근에 등록된 질문