Q&A

슬래쉬(/) 변환(\/) 문제입니다

2025.01.21 13:18
96
0
CMS/프레임워크 Rhymix 2.1
개발 언어 PHP 7.3

 

게시판에서 저장된 tags이 모듈에서 저장된 a값과 같은 경우, 뭔가 출력하는 기능이 있는데

tags값에 슬래쉬가 있는 경우엔 일치해도 작동을 안해서 어찌 어찌 분석하다보니 tag 값에는 슬래쉬 앞에 백슬래쉬가 자동으로 붙습니다.

 

예)

모듈에서 저장된 a값(데이타베이스에서 확인): Describe your grandpa/grandma's job

게시판에 저장된 tag값(그냥 출력해서 확인): Describe your grandpa\/grandma's job

 

관련 코드 1:

{@
$tag_desc = getModel('tag_description')->getTagDescription($oDocument->get('module_srl'),$oDocument->get('tags'));
}
<!--@foreach($tag_desc as $no => $td)-->
<!--@if(in_array($td->td, explode(',',$search_td)))-->
{@
$replace_td = preg_replace('/'.$td->td.'/', '', $search_td);
$replace_td = preg_replace('/(^,|,$|,,)/', '', $replace_td);
}
<a href="{getUrl('search_td',$replace_td,'search_card','')}">
<span class="tag_description" style="{$td->css}"|cond="$td->css">{$td->td}</span>

 

관련 코드 2(게시판에서 태그값 입력받는 부분):

<input class="ppip" type="text" name="tags" id="tags" value="{htmlspecialchars($oDocument->get('tags'))}" placeholder="{$lang->tag}: {$lang->about_tag}" />

 

해결해보려고, 관련 코드 1에서 tags 값에서 \를 뺀다음에 찾도록 하면 되겠지 싶어서, gpt 빌고, 어르고 달래고, 화내고 오만가지 방법을 해봐도 백슬래쉬가 안떨어져요. 관련 코드 2에서 /를 입력할때 백슬래쉬가 안붙도록 해볼까 또 빌고 읍소하고 다 해봤지만 안되었습니다.

 

고수님의 조언부탁드립니다.

 

스코스코 Lv. 5

댓글 7

  • 2025.01.21 13:48 #1855860

    슬래시 앞에 백슬래시를 끼워넣는 것은 json_encode 함수가 흔히 하는 짓인데,
    올려주신 코드에서 json 관련된 처리를 하는 부분은 보이지 않습니다.

    (htmlspecialchars나 addslashes는 이미 있는 슬래시 문자를 건드리지 않으므로 무죄입니다.)

    혹시 tag_description 모듈의 getTagDescription 함수에서
    json_encode 함수를 쓰는 부분이 있는지 살펴보시면 도움이 될 것 같네요.

    만약 json_encode가 있다면
    보안이나 그 밖의 다른 이유로 중요할 수도 있으니 함부로 제거하면 안 되고,
    JSON_UNESCAPED_SLASHES 플래그를 끼워넣어서
    네 슬래시 건드리지 마! 라고 알려주는 것이 이상적입니다.

  • 2025.01.21 14:18 #1855867
    tag_description 모듈과 게시판 스킨 모두 검색해봤는데, json_encode는 찾을 수 없었습니다 ㅠ.ㅠ
  • 2025.01.21 14:25 #1855871

    혹시 DB에 저장되어 있는 태그 값을 직접 확인하실 수 있나요?

    DB에 직접 접근하기 어렵다면, 순정 게시판 스킨의 글 수정 화면에서

    태그 입력란에 표시되는 내용이 그나마 가장 가깝습니다.


    모든 모듈은 DB에 데이터를 저장하는 과정, 그리고 다시 불러와서 뿌려주는 과정이 있는데
    어느 쪽이 문제인지 확실히 알아야 대응책을 찾을 수 있습니다.
    원본 데이터가 잘못 저장되어 있다면 뿌려주는 과정에서 뭘 해도 소용이 없겠지요.

  • 2025.01.21 14:37 #1855880

    다른 문제라는 것을 깨달았습니다. 슬래쉬 때문에 인식을 못하는 게 아니라 ' 과 관계있습니다.
    게시판 DB: Describe your grandpa/grandma's job
    모듈 DB: Describe your grandpa/grandma&#039;s job

    모듈에서 입력을 다양하게 해봤는데 DB에 저장된 값은 아래와 같습니다.

    &#039; 부분을 DB에서 직접 수정하니까 인식하는 걸보니

    모듈에서 저장할때 ' 부분이 &#039; 으로 치환되는 것이 문제인 것 같습니다 ㅠㅠ
    (Describe your grandpa/grandma' 이나 Describe your grandpa/grandma's 까지만 입력했을때는 또 정상이네요;;;)

    image.png

  • 2025.01.21 14:47 #1855887

    &#039;는 라이믹스 기본 escape입니다.
    모듈에서 비교할 값도 마찬가지로 escape() 한 후에 비교하시면 될 것 같습니다.

     

    그나저나 /는 DB에도 \/로 저장되어 있네요. ㅡ.ㅡ

  • 2025.01.21 14:59 #1855892
    영문을 모르게 해결했습니다.. 찝찝 ㅠ.ㅠ
    모듈에서 설정값을 지웠는데도 DB에 Describe your grandpa/grandma&#039;s job 가 남아있어서, DB에서 직접 지운다음에 모듈에서 다시 입력하니까 정상적으로 입력되었습니다. 오늘 6시간 동안 뭘한지 모르겠습니다. 정성이 갸륵해서 그냥 해결된건가.. 도움주셔서 너무 감사합니다. DB 값을 직접 확인하면서 보니까 덜 햇갈리네요
  • 2025.01.21 15:27 #1855903

    어느 시점부터 코드상의 문제는 다 해결하셨는데,
    DB에 남아 있는 값 때문에 여전히 문제가 있는 것처럼 보였나 봅니다. ㅎㅎ

    코어를 개발하면서도 최근에 비슷한 사례가 있었어요.
    회원 그룹명에 다국어 코드를 넣으면 깨져서 보인다는 분이 계시더라구요.
    깨져 보일 만한 부분을 다 수정했는데도 계속 깨져 보인다고 하셔서
    알고 보니 처음부터 깨져서 저장되는 버그가 있었더군요...

    그냥 그런 날이 있습니다... ㅠ