페이스북에 링크를 공유하면 제목에 엔티티 문자로 나옵니다.
현재 XE 코어는 1.8.45로 최신 버전이고 스케치북 스킨을 사용하고 있습니다.
write_form.html에 title에 해당하는 부분을
htmlspecialchars($oDocument->getTitleText(), ENT_COMPAT, 'UTF-8', false) 와 같이 수정하였습니다.
이렇게 적용하면 사이트 내부에서는 엔티티 문자를 특수문자로 인코딩하여 정상적으로 보여지게 하는 것으로
알고 있습니다.
페이스북에서 링크 공유하게 되면 제목이랑 내용이 엔티티 문자 그대로 출력되는데 이걸 정상적으로
특수문자가 보여지게 하려면 어떻게 하면 될까요?
html 엔티티 문자로 저장하지 않고 그대로 저장할 수 있는 방법은 없는 건가요?
예를 들어서 데이터베이스 상에서도 & 가 아닌 &로 그대로 저장될 수 있도록요.
댓글 10
공유는 잘 됩니다.
다만 제목에서 html 엔티티 문자가 그대로 출력되는 부분에 대해서 말씀드린 겁니다....
이렇게 공유되면 문제 없지 않나요?
위와 같은 경우 말씀 하신것 처럼 노출이 되네요. 띄어쓰기 차이일지.. 본문에는 괜찮네요. 그런데 답변이 아니라 죄송하지만 이 것을 위해 html로 저장하지 않으면 오히려 더 광범위하게 다른 곳에서 문제가 생기지는 않을까요??
좋은 답변이 아니라 죄송하네요.
현재 XE타운은 정상적으로 특수문자가 출력이 되는데 제가 운영하고 있는 사이트에서는
저렇게 특수문자가 엔티티 문자로 나오니까요 ㅠㅠ
엔티티 문자가 그대로 데이터베이스에 저장되는 거 같아서 애초에 특수문자 그대로 저장되면 링크
공유에서도 문제가 없을 것 같다는 생각이 들어서 여쭤보는 궁금증이네요 ㅎㅎ
도움을 드릴 수는 없지만 추천은 하고 갈게요. (좀 더 많은 사람이 보도록?)
아는 사람이 봐도 답변을 받을지 모르지만..ㅜㅜ
SEO 모듈이 XE의 내장 함수인 getBrowserTitle 함수를 이용하는데 해당 함수는 htmlspecialchars
함수를 사용하여 $document_title 변수의 내용을 한번 더 엔티티 문자로 인코딩합니다.
예를 들어서 < 라는 엔티티 문자에서 &(엠퍼샌드)를 & 라는 엔티티 문자로 인코딩하여 &lt;
와 같은 형태로 만들어버리는 겁니다.
XE 상에서는 두 번 인코딩하지 않으므로 정상적으로 보여지지만 페이스북의 경우 SEO 모듈의 Open Graph를 사용하는 코드 부분에서 저렇게 변경된 문자열이 넘겨주게 됩니다.
페이스북에서는 엔티티 문자 &를 자동으로 변경하여 <로 만들어주면서 출력이 비정상적이었던
겁니다.
htmlspecialchars_decode 함수를 이용해서 인코딩된 &를 다시 &(엠퍼샌드)로 디코딩하고 <로 만들어주면 정상적으로 출력되게 됩니다.
별거 아닌 부분이었는데 한시간동안이나 헤맸네요....
축하합니다 >_<