xe 관련 질문해도 되나요?
htmlspecialchars() 함수를 사용 하셔도 됩니다.
- $tags = htmlspecialchars($obj->tags);
http://colorscripter.com/s/Xq0Rzft
코드 스나이퍼 보면
$ett = array ("<" => "<", ">" => ">", "\\\"" => """", "\'" => "'" );
에 등록되어 있네요
이게 아니고 아래 처럼 &가 들어가 있는 코드로 넣어주세요
$ett = array ("<" => "<", ">" => ">", "\\\"" => """, "\'" => "'" );
xe의 코어를 수정한다는게 좋은 방향은 아니지만 코어를 개조했다고 하셔서 ..
아래처럼 해당 파일을 수정해 보세요
xe 디렉토리 최상위에서
/modules/tag/tag.controller.php 라인 42
아래는 xe 버전 1.7.3.7 의 원본 triggerInsertTag 함수 코드 입니다.
- function triggerInsertTag(&$obj)
- {
- $module_srl = $obj->module_srl;
- $document_srl = $obj->document_srl;
- $tags = $obj->tags;
- if(!$document_srl) return new Object();
- // Remove all tags that article
- $output = $this->triggerDeleteTag($obj);
- if(!$output->toBool()) return $output;
- // Re-enter the tag
- $args = new stdClass();
- $args->module_srl = $module_srl;
- $args->document_srl = $document_srl;
- $tag_list = explode(',',$tags);
- $tag_count = count($tag_list);
- for($i=0;$i<$tag_count;$i++)
- {
- unset($args->tag);
- $args->tag = trim($tag_list[$i]);
- if(!$args->tag) continue;
- $output = executeQuery('tag.insertTag', $args);
- if(!$output->toBool()) return $output;
- }
- return new Object();
- }
자 이제 위의 원본 코드를 아래 처럼 수정해보세요
- {
- #치환할 HTML 엔티티
- $ett = array ("<" => "<", ">" => ">", "\\\"" => """, "\'" => "'" );
- $module_srl = $obj->module_srl;
- $document_srl = $obj->document_srl;
- #foreach로 태그의 문자열을 치환한다.
- foreach ($ett as $k => $v) {
- $obj->tags = str_replace($k, $v, $obj->tags);
- }
- $tags = $obj->tags;
- if(!$document_srl) return new Object();
- // Remove all tags that article
- $output = $this->triggerDeleteTag($obj);
- if(!$output->toBool()) return $output;
- // Re-enter the tag
- $args = new stdClass();
- $args->module_srl = $module_srl;
- $args->document_srl = $document_srl;
- $tag_list = explode(',',$tags);
- $tag_count = count($tag_list);
- for($i=0;$i<$tag_count;$i++)
- {
- unset($args->tag);
- $args->tag = trim($tag_list[$i]);
- if(!$args->tag) continue;
- $output = executeQuery('tag.insertTag', $args);
- if(!$output->toBool()) return $output;
- }
- return new Object();
- }
단순히 설명 드리면 DB Insert 시 치환하여 입력되게 됩니다.
건투를 빕니다.
삭제된 댓글입니다.
삭제된 댓글입니다.
당연히 되지요! 다만 xe 관련한 고수들이 있을지 의문이지만요..
질문해 주신 내용만 보면 디비에 데이터 입력 시 html 엔티티로 치환을 하지 않아 발생한 문제로 보여집니다.
$ett = array ("<" => "<", ">" => ">", "\\\"" => """", "\'" => "'" );
- foreach ($ett as $k => $v) {
- $str = str_replace($k, $v, $str);
- }
스케치북 모듈에서 디비에 데이터 입력 시 위와 같이 치환을 해주세요~
답변 작성
질문에 적합한 답변을 상세히 작성해 주시기 바랍니다.
답변이 찬성되면 태그평판 +2점이 적립, 반대되면 태그평판 -1점 차감됩니다.
답변이 채택되면 태그평판 +10점이 적립됩니다.