Extra Form
PHP PHP 7.3
CMS Rhymix 2.x

https://scorefactory.io/ielts_total/1460532

 

위의 포스팅을 언어 설정을 영어로 변경 후 수정하여 영문 입력하였습니다. (다국어 대응)

 

영문 버전)

https://scorefactory.io/ielts_total/1460532?l=en

 

저장하고 나니 모든 이모지 🍕🍔🍟🌭🍿 들이 ???? 으로 표현됩니다.

어떻게 해결해야 할까요?

 

  • profile

    다국어 대응으로 많은 노력을 기울이시려고 하시는 것 같아 가급적 힘빠지는 소리라 안드리려고 했는데 사실 XE에서 만들어진 다국어 기능은 굉장히 불안정하고 미완성 부분이 많습니다. 사실 여러 문제들이 나올거에요.

    https://xetown.com/questions/1129650#comment_1129651

    2018년 상황인데 지금은 어떻게 바뀌어 가는지는 잘 모르겠습니다.

    저도 문서 저장 방식이 언어별로 어떻게 되는지 파악하지 못해 답변은 못드리지만
    현재 증상으로는 영어 언어의 저장시 db에 이모티콘을 넣지 못하는 상황이신 것 같네요.

    혹시 db가 utf8mb4 로 되어 있으신가요?

  • profile profile
    ㅠ..ㅠ 그렇군요. 저는 라이믹스 다국어 대응 기능이 천재가 만들 줄로만 알았는데 ㄸㄹㄹ
    db 확인하는 법 기억하느라 한참 걸렸습니다.
    서버 문자셋: UTF-8 Unicode (utf8)
    서버 연결 콜레이션(언어): utf8mb4_unicode_ci 로 나옵니다.
  • profile profile
    그럼 왜 영어로 저장될때 db에 이모티콘이 들어가지 않는지는 라이믹스 개발진께서 말씀해주셔야 할 것 같네요. 언어 변경 후 문서를 별도로(같은 문서번호로) 저장한다는 것 까지는 아는데 중간과정이 틀린건지....
  • profile profile
    xe_documents 테이블을 봤더니 1460532 글번호에 lang_code가 ko로 작성된 글만 검색됩니다. 별도의 테이블에 저장되는게 아닐까 하는 생각이 듭니다.
  • profile profile

    저도 다국어 쓰다가 도저히 안되서 포기하고 안쓴지 오래라 그때 db를 확인해보지 못해 지금 db 구조를 몰라요...

  • profile

    hexa code로 입력된 아이콘이 에디팅하고나서 ascii 코드로 바뀐 것으로 봐서 에디터의 문제일수도 있을것 같아보입니다. 영문 버전으로 저장하기 전에 에디터의 "소스" 버튼을 눌러서 해당 부분이 여전히 hexa code인지 확인해봐야 할것 같습니다. 저장한 직후에도 편집모드로 가서 다시 소스 버튼을 눌러서 확인해보시구요.  즉, 😪 가  😪 로 바뀌는지 보세요.

  • profile profile

    어라 소스 열어서 😪 입력하고 바로 저장했더니 이모지가 표현됩니다;;; 

     

    --> 해결되었습니다! 도움주셔서 감사합니다!

  • profile

    최초 작성된 언어만 documents 테이블의 content 컬럼에 저장되고, 다국어 내용은 확장변수의 형태로 저장됩니다. 라이믹스는 content 컬럼에 포함된 이모티콘을 자동으로 인코딩해 주지만, 확장변수는 그런 기능이 없습니다. 이모티콘을 입력하면 그대로 저장하려고 하고, hex 코드를 입력해도 마찬가지로 그대로 저장하지요. 이모티콘 그대로 저장하려면 DB의 확장변수 테이블을 utf8mb4로 바꾸셔야 할 겁니다. 일단 서버 문자셋이 utf8mb4가 아닌 utf8이라는 것부터 문제입니다.

  • profile profile
    요런 비밀이 있군요. 이제 이해가 갑니다~
  • profile
    서버 문자셋은 최초 설치하셨던 서버환경에서 utf8밖에 지원하지 않던 것을 그대로 기억하고 있을 가능성이 높습니다. files/config/config.php에서 db의 charset 설정이 utf8로 되어 있다면 utf8mb4로 바꾸시면 됩니다.

    결론: 서버 문자셋 설정과 확장변수 테이블을 모두 utf8mb4로 변경하세요.
  • profile profile
    네, 정말 이상하게 설계된 기능입니다. 언어별로 다른 내용을 저장하는 테이블을 하나 더 만들고 그걸 불러오는 함수를 정식 제공한다면 이해하겠는데, 어이없게도 확장변수에 저장한 후 특정 조건 충족시 내용을 임시로 바꿔치기하는 꼼수를 씁니다... ㅡ.ㅡ;;
  • profile profile

    답변 감사합니다!
    서버 문자셋 설정은 말씀하신대로 수정하였습니다.
    xe_document_extra_vars 테이블의 value 항목의 데이터정렬방식을 utf8mb4 로 수정했습니다. 이렇게 하는게 맞을까요?

  • profile profile
    files/config/config.php에서 db의 charset 설정을 utf8mb4로 수정했는데도 phpmyadmin에서는 데이터베이스 서버 문자셋이 여전히 UTF-8 Unicode로 나옵니다. 수정 후 혹시 적용시키는 방법이 따로 있을까요?
  • profile profile

    예전에 외국인들도 공통 관심인 주제의 사이트라 영어,중국어 번역 api 통해서 다국어로 저장했는데 뻘짓 한거였군요. 완전 사기 당했네요 ㅋㅋ
    전 다국어로 검색엔진이 문서 긁어가는 줄 알고...

    뭐 지금은 다국어 문제가 너무 많아 다시 쓸일은 없지만 뒤 늦게 진실과 마주하게 되었네요. 그때는 XE에 관한 지식이 얕아 엉뚱한 상상만 했던거네요..

  • profile profile
    phpmyadmin은 라이믹스 설정의 영향을 받지 않습니다.
  • profile profile
    말씀하신대로 하니 해결되었습니다 ㅠ.ㅠ
  • profile profile
    헐 그럼 이거 다국어로 입력해봐야 검색 엔진이 인식못하나요?
  • profile profile
    다국어로 표시되는 페이지를 잘 분리하셨다면 긁어갔을 수도 있습니다. ㅎㅎ
  • profile profile

    뭐 제가 따로 한거라고는 엉뚱한데 컨텐츠가 저장되도록 한게 다인데 긁어갈리가요 ㅋㅋ

     

    meta tag는 아니라도 언어변수로 접근한 봇은 해당 언어로 긁긴 하겠네요. 근데 왠지 같은 문서번호로 검색엔진이 색인을 할지는...

  • profile profile

    확장변수에 저장되는 것은 알고 있었지만, 인코딩은 안해주는 것은 지금 알게되었네요 ㅎ~~. 그렇다면, 다국어 언어 지원을 끊을수도 없다면, 그냥

    if($extra_content->title) $extra_content->title = utf8_mbencode($extra_content->title);
    if($extra_content->content) $extra_content->content = utf8_mbencode($extra_content->content);


    을 추가해주면 어떨런지요?

  • profile profile
    그 엉뚱한데가 혹시 확장변수 테이블인가요? ಥ_ಥ
  • profile profile

    네. 그런데 라이믹스에서 그걸 메타태그 생성때도 언어별로적용해 준다면 공유나 seo 측면에서 반영이 될텐데 제가 확인을 못했구요.

    결정적으로 같은 url 문서를 언어코드 변수 구분으로 색인을 다르게 해줄지 의문이기도 합니다. 사이트맵,rss 등에 언어는 반영되지도 못하잖아요.

  • profile profile
    혹시나 설마 하고 구글에 제목 그대로 검색하니 역시 안나오네요. 제목으로 똑같이 검색하면 색인되어 있으면 나오거든요.
  • profile profile
    그렇네요..
  • profile profile
    네이버, 구글모두 canonical url 참조하기 때문에 모든 언어에 canonical url 이 모두 하나로 되어 디폴트언어의 url을 대표로 인식하고 나머지 언어는 중복 문서로 취급할 가능성이 높아 보입니다. 다국어 구조 자체를 SEO 에 대응하게 하려면 url 구조부터 해서 다 바꿔야 할거 같은데요.
  • profile profile
    네, 좋은 생각입니다. 깃허브 고고싱~!
  • profile profile

    네, 다국어로 매뉴얼을 제공하는 소프트웨어나 제품 판매 홈페이지 같은 것을 봐도 똑같은 URL에 브라우저 언어에 따라 다른 콘텐츠를 제공하는 경우는 거의 없지요. 대부분 /en/, /ko/ 등 URL을 구분해서 제공하고, 메인화면만 공유하거나 메인화면 접속시 해당 언어에 맞는 URL로 이동을 유도합니다. (예: 애플)

    페북이나 트위터 같은 대형 플랫폼들은 똑같은 URL이라도 언어를 바꿔서 보여주곤 하지만, 얘네는 SEO 따위 걱정할 필요가 없는 처지이고... 심지어 구글도 hl=ko처럼 URL에 언어를 넣는 경우가 많습니다.