본문 바로가기

코딩/PHP

DB, PHP, HTML 특수기호 호환

HTML에서 하트는 ♥로 사용한다.

현재 게시판을 만드는 과정이다. 제목에 특수기호인 하트가 들어갔을 때 게시물을 클릭하니 DB에서 특수기호를 인식하지를 못한다. (글을 눌러도 제목과 글이 안나옴.)

DB에 저장될 때는 하트가 ♥라는 문자열로 저장되게 하였고 DB에서 가져온 문자열을 html에 랜더링 하는 것도 잘 된다. 게시판은 GET방식으로 제목을 보내고 이 데이터를 DB에 보낸다. html에 특수기호가 포함된 제목, 내용이 있을까봐 get방식으로 보내기 전에 htmlspecialchars()로 한번 변환해서 get데이터로 보내주었다.(❤가 ♥로 변환되는 효과가 있었음) 그결과 www.~~~~?title=안녕♥로 잘 동작했다. 그러나 이것도 DB가 알아듣지를 못한다. 여전히 글을 터치해도 값을 안줌. 글을 터치해도 값을 주지 않는다는 것은 title을 비교했을 때 DB에서 맞는 데이터를 찾지 못했다는 말이다. 그런데 URL창에는 위에 말했듯이 올바르게 GET방식으로 전달이 되었다. 그런데 GET_['title']을 찍어보면 '안녕'만 나오고 특수문자가 나오지 않았다. GET방식에서는 매개변수를 구분할 때 &를 사용하기 때문에 올바르게 전달이 되지 않았던 것이다.(문제점을 찾음!) DB에서 default기능이 잘 되지 않아서 php코드로 아무것도 넣지않고 게시물을 create했을 때는 안녕♥라고 입력되게 해 놓았는데(그래서 DB에 안녕♥라는 문자열이 저장됨.) 해결책으로 하트를 코드로 표현한 것이 아니라 그냥 특수문자로 바꾸었다. 그러니 해결 되었다.

 

1. 인코딩의 차이가 있는거 아냐? DB는 utf8, html도 utf8, php는 따로 명시되어 있지않다.

2. string을 바로 보내면 안되고 utf8로 인코딩 해서 보내볼까

 

<해결>

하트 특수기호를 &hearts;로 표현하는 것은 html에서 정한 것이다. 즉 html에서만 이렇게 표현함.(웹페이지의 인코딩은 utf-8이다.) DB나 다른곳은 utf-8을 사용하고 있다. utf-8에서는 하트 특수문자를 다르게 표현한다. 내가 DB에 저장할 때 &hearts; 이렇게 아예 문자열을 저장했기 때문에 db에서 가져온 데이터가 html에서 올바르게 렌더링 되지만 html에서 아무리 하트 특수기호를 html방식으로 인코딩해서 DB로 보내봤자...(어?..되어야 하는데?? db에 저장할 때 html인코딩 방식으로 아예 "&hearts"를 저장했으니깐 html방식으로 인코딩해서 db로 보내면 찾아져야 하는 것 아닌가? ->되야하는게 맞음 단지 GET방식에서 &가 들어가면 매개변수구분자로서 기능하기 때문에 제대로 작동이 안된 것!)

 

원인은 모르겠지만 해결방법은 간단하다. html에서 하트기호를 utf8로 인코딩해서 db로 보내면 된다. 그럼 올바르게 찾아줄 것이다. 그럼 db에서 utf8로 인코딩된 놈을 읽어오면 html에서는 어떻게 되나?(html페이지에서는 utf-8을 사용한다고 되어있기 때문에 잘 동작할듯?->그래서 위에서 해결됬네! DB와 html의 인코딩이 같으니깐!)

 

Q: 그럼 "&hearts;" 이런건 뭐냐?? 이건 어떤 인코딩이냐?? 이렇게 사용하는 것은 인코딩이 아니라 html이라는 언어에서만 사용하는 특수문자를 표현하는 방식이다. html에 "&hearts;"라고 코드를 써놓으면 출력될 때는 ❤처럼 출력될 것이다. 이것을 이해할 때는 내부적으로 head에 선언해놓은 <meta charset="utf-8">코드에 의해 돌아간다.(<meta charset="utf-8">의 의미는 이 파일을 인코딩 할 때 utf-8로 인코딩하라는 뜻!)

 

@@html에서 특수문자를 표현하는 방법은 살펴본 바와 같지만 웹페이지에서 특수문자를 표현할 때는 utf8로 해야 된다고 한다!! 그래서 DB에서 utf8로 인코딩 된 애들을 그냥 보내도 잘 동작하는듯??

 

 

m.blog.naver.com/PostView.nhn?blogId=trsketch&logNo=154591782&proxyReferer=https:%2F%2Fwww.google.com%2F

 

UTF-8 문자 사용하기

한글에서는 [문자표 입력]을 통하여 다양한 기호를 쉽게 입력할 수 있다.하지만 웹에서는 특수문자의 사용...

blog.naver.com

"추가로 웹페이지에서는 utf8로 맞춰야지만 올바르게 동작한다."

 

<meta charset="utf-8"의 의미>

m.blog.naver.com/PostView.nhn?blogId=hyejungs88&logNo=220319561951&proxyReferer=https:%2F%2Fwww.google.com%2F

 

문자 코드 셋 지정

문자 코드 셋 지정 이번에는 문자 코드 세트를 저정하는 방법에 대해 알아도록 하겠습니다. 우리가 만드는 ...

blog.naver.com

Q: html에 charset이랑 비슷한 뭔가 헷갈리는 뭔가가 있었던 것 같은데 기억이 안난다.

'코딩 > PHP' 카테고리의 다른 글

[php] 코드의 수정사항이 반영이 안될 때  (0) 2021.01.09
웹페이지 글자가 깨질 때  (0) 2020.11.24
PHP 파일 구분자  (0) 2020.11.20
PHP 경로 지정방법  (0) 2020.11.20
PHP require와 use의 차이  (0) 2020.11.20