jam
55
2020-10-15 08:33:15 작성 2020-10-15 08:36:05 수정됨
11
661

웹호스팅에 올린 글자 깨짐으로 몇시간 고생중입니다 도와주세요 !


웹호스팅은 FastComet 사용하였고 

요금제 제일 낮은걸로 하고있습니다.

php mysql 올렸고요

database 테이블 문자셋팅을 utf8 general ci 에서 itf8 unicode ci 로 바꾸기도 해봤는데 그대로입니다.

구글링 해보니까 my.ini 파일을 latin1 -> utf8 로 수정하라고 하던데

호스팅 서버의 mysql root 권한이 없다보니까 건딜수가 없더라고요 ..

character_set_server

latin1 

이게 라틴으로 되있는거 같아서 호스팅 고객센터에 문의했는데 그건 너가 바꾸게 되면

해당 서버 이용하는 모든고객의 환경변수값이 바뀐다 

근데 너가 글자 깨지는 문제가 이 문제와는 관련이 없는거 같아보인다. 라고 답변합니다..


어떻게 해결할 방법이 없을까요?

주소는 jaemu.xyz 입니다.

0
  • 댓글 11

  • 10k
    2020-10-15 08:45:25

    누구나 쓰는 사설 DB가 라틴어일리는 없어요.  (라틴회사인가 -_-a)

    UTF-8 일겁니다. 

    모든 개발의 기본은 utf-8입니다. 


    관리자페이지에서 등록해보지 마시고 순수하게 DB에 쿼리로 INSERT로 한글 넣어보세요. 


    1. 한글이 들어간다 : 상품등록페이지, 상품리스트에서 인코딩이 등록 및 제대로 나오는지 본다. 

    2. 한글이 안들어간다 : DB생성할때 인코딩이 맞게 들어갔는지 본다. 

    3. 서버설정을 건드리시는거면 제대로 리스타스가 안되서 적용이 안됐다고 생각해볼수도 있습니다. 


    그리고 죽어도 모르겠다? 그러면 그냥 파일명을 이미지 업로드로 하는 꼼수가 있긴 한데 비추입니다. 

    그리고 질문은 담부터는 QNA에 하시면 되요. 

  • jam
    55
    2020-10-15 08:56:00
    아 죄송합니다 ... 그래서 답변주셔서 감사합니다 알려주신 가이드대로 해보겠습니다
  • 라이라
    2k
    2020-10-15 08:59:26

    db 연결 후에 set names utf8 쿼리 한번 날리고 insert 해보세요

  • jam
    55
    2020-10-15 09:10:34 작성 2020-10-15 09:15:10 수정됨

    두분 알려주신대로 phpmyadmin sql 에서

    SET NAMES utf8 먼저 날리고,
    
    INSERT INTO product (item_name, item_brand, item_originalprice, item_price, item_model, item_feature)
    VALUES ("삼성", "삼성", "234234", "23423", "삼성", "삼성");
    한다음 product 테이블에 row 추가된거 확인하고 홈페이지가서 확인해보면
    한글 ?? ?? ?? ?? 이렇게  깨져져 있습니다.
  • hex로 셀렉트해서 데이터 가져오면 16진수로 정확하게 나오나요?


    SELECT <col>, HEX(<col>) FROM <table_name> WHERE ...

  • jam
    55
    2020-10-15 09:30:06 작성 2020-10-15 09:30:53 수정됨

    문제가있는 테이블 상품명 컬럼에 실행한결과  이렇게 나옵니다

  • 제컴에선돌아갔는데
    41
    2020-10-15 09:34:56

    https://onlinehextools.com/convert-hex-to-utf8

    이런곳이나 hex -> utf-8 매핑 해주는 곳에서 정확한 값이 들어 왔는지 (hex(item_name)의 값이 item_name과 같은지) 확인해 보세요. 제일 밑에 삼성은 제가 쳐보니까 맞는것 같은데 다른 글자들도 한번...

  • jam
    55
    2020-10-15 09:42:50

    새로운 방법 알려주셔서 감사합니다.. 

    다 하나씩  확인해봤는데 정황한 값이 들어가있습니다..

  • 네 일단 저한테 비슷한 문제 생겼을때 (mysql, php) 제가 시도해봤던 방법을 다 나열해 보겠습니다. 이걸로 안되면 직접 테스트해보며 찾아보지 않는 이상 도와드리기 힘들 것 같아요.


    1. database collation이 utf-8인지 확인

    • latin1같은 경우 ASCII + 성조 들어있는 글자들을 표현하기 때문에 북미권에서 많이 사용됩니다. 근데 DB에서 불러온 값이 정확한걸 보니 이건 세팅이 되어 있을 것 같네요.

    2. 컬럼이랑 테이블 캐릭터셋이 utf-8인지 확인

    • SHOW CREATE TABLE

    3. HTML이 UTF-8으로 서빙되는지 확인

    • header("Content-Type: text/html; charset=utf-8");


    4. 웹서버 (아파치나...)에 디폴트 캐릭터 셋을 UTF-8으로 명시적으로 지정

    5. PHP 디폴트 캐릭터 셋을 utf-8으로 지정

    • ini_set("default_charset", 'utf-8')

    6. 출력에 사용되고 있는 함수의 스트링 관련 함수들이 모두 mb_<xyz> 형태의 멀티바이트 스트링 함수인지 확인.

    7. mb_convert_encoding 함수로 해결 가능한지 확인


  • jam
    55
    2020-10-15 10:00:43

    상세한 답변 너무 감사합니다 

    알려주신 가이드대로 하나하나씩 해보겠습니다 

    좋은 하루보내세요 ㅎㅎ

    다시한번 감사드립니다

  • 74794C6565
    6k
    2020-10-15 13:20:41

    디비 컬럼 collation 테이블 collation 다 확인해보세요 
    아무생각없이 테이블 생성 하다보면 라틴으로 콜레이션을 잡고 생성이 된 경우 있습니다. 
    제가 그랬음.....ㅠㅠ

  • 로그인을 하시면 댓글 을 등록할 수 있습니다.