Extra Form
PHP PHP 8.3
CMS Rhymix 2.1

첫 작성시에는

<pre>
<code>&lt;div&gt;테스트코드&lt;/div&gt;</code></pre>

 

다음과같이 정상으로 작성됩니다

sql데이터 확인시에도 동일하게요

 

게시물 수정을 하기위해 수정을 누루면

<pre>
<code>&lt;div&gt;테스트코드&lt;/div&gt;</code> </pre>

다음과같이 </code> </pre> 사이에 공백이 붙습니다

글횟수에 따라 계속해서요 10번하면 </code>          </pre>

에디터에서는 문제가 없는거같고요 다른 에디터로 바꿔도 동인 증상이거든요

어디서 확인해야 될까 조언좀 부탁드립니다.

  • profile

    일단 3명의 용의자를 수사선상에 올려 보지요.

     

    1) 에디터

    2) 브라우저

    3) 서버단에서 글을 저장할 때 가공하는 로직

    4) 저장한 글을 다시 불러오는 과정에 끼어드는 자료들

     

    에디터를 변경해도 증상이 마찬가지라면 1은 아닐 가능성이 높습니다.

    단, 대부분의 에디터는 동일하게 contenteditable 기반으로 만들어져 있으므로

    1과 2의 특정한 조합에서 문제가 생길 수도 있습니다.

    크롬, 파이어폭스, 웨일 등 다양한 브라우저에서 테스트하여 2를 확실하게 배제할 필요가 있습니다.

     

    만약 최고관리자 권한으로 글을 작성했을 때 증상이 개선된다면 3일 가능성이 높습니다.

    관리자가 아닌 사람이 작성한 글은 XSS 필터링을 위해 가공을 거치는데,

    그 과정에서 태그 구조가 조금 어긋날 수도 있으니까요.

    반면, 권한과 관계없이 항상 문제가 발생한다면 4일 가능성도 생각해야 합니다.

    DB에도 이상하게 저장된다면 4일 가능성은 낮아 보이긴 합니다만...

     

    그나저나 </code>와 </pre> 사이에 들어가는 공백은 그냥 스페이스(0x20)인가요?

    아니면 &nbsp; 같은 이상한 특수문자나 기호로 구현된 공백인가요?

    <div>테스트코드</div>

    방금 위에 테스트 코드를 넣고 몇 번 수정해서 저장해 보았는데, 태그 사이에 공백은 생기지 않습니다.

    님이 작성하실 때는 XE타운에서도 마찬가지인가요?

  • profile profile

    저장되는 공백은 (0x20)의 공백입니다.
    1. 에디터 이전에 호출되는부분에서의 문제인듯 싶습니다.
    2. 저는 크롬을 사용중이며 엣지를써도 크로미윰 계열이라 똑같습니다 일단 제외
    3. 최초저장시 서버단에서의 변조없이 DB상에 공백이 없이 저장됩니다.

    수정후 (0x20)공백은 저장됩니다.

    저는 저장된 값이 불러올때 변조된다고 생각하는데 그부분을 못찾겟네요
    XE타운에는 아직 글을 작성해보지 않았습니다.

  • profile profile
    방금 XE타운에도 동일하게 작성해봤는데 동일하게 나타나네요
  • profile profile
    아, 여러번 수정하는 상황을 고려한다면 작성 후 다시 불러오는 부분의 문제도 배제할 수 없겠네요.
    특정한 에디터 컴포넌트나 에디터 플러그인,
    또는 화면에 출력되는 내용을 변조하는 애드온의 영향일 수도 있겠습니다.
  • profile

    서너번 수정해 보았는데 </code>와 </pre> 사이가 뜨는 현상은 여전히 발견되지 않습니다.

    윈도우, 최신 크롬 안정화버전(125.0.6382.3)입니다.

    <div>테스트중입니다!</div>
  • profile profile
    찾았습니다.
    해결본 부분은 아랫 댓글에 달았습니다.
  • ?
    수정 테스트123
    <div>테스트코드</div>
  • ?
    댓글로 테스트했을때 문제 없는데 개발자도구 켜신뒤에 preserve log 활성화해서 언제 처음으로 공백이 들어가는지 확인(값을 보내거나 불러올때)해서 해당 요청직전 부분을 확인해보세요.
  • profile

    찾았습니다.
    modules\document\document.item.php 에서

    function getContentText($strlen = 0)아래
    651번줄
    $content = preg_replace('!(</p|</div|<br)!i', ' $1', $this->get('content'));에서
    ' $1'이부분에 공백이 있습니다
    이걸삭제하니 해결되는군요

    $content = preg_replace('!(</p|</div|<br)!i', '$1', $this->get('content'));
    근데 코어를 건드는거라서 잘하는건가 걱정됩니다..

  • profile profile

    아, 글 수정시에 적용되는 코드이니 댓글로 테스트했을 때는 문제 없는 게 당연했군요.

     

    거기에는 공백이 들어가는 것이 맞습니다.
    </p 정규식에 </pre>가 걸려 버리는 바람에 의도치 않은 부작용이 생긴 것 같네요.
    공백 문자는 그대로 두고 </p> 또는 </p\b로 변경해 보세요.

  • profile profile
    근데 코어를 건들여두면 다음패치때 힘들어 질거같아 고민 중입니다.
  • profile profile
    수정해서 정상이 되고 다른 부작용이 없다면 코어에 정식으로 반영해 드립니다.^^
  • profile profile

    아! 네 수정했고 잘됩니다

    사용중에 문제가 생기면 글남기겠습니다