가장 나은 방법 : 영팔님이 플러그인을 만들어 주셨습니다.
http://082net.com/2008/859/euckr-trackback-plugin/
위 링크의 플러그인을 사용하여 문제를 해결하는 것을 권장합니다. 이 포스트는 더이상 업데이트를 하지 않겠습니다.
-2008.8.24
WordPress를 사용하다보면 UTF-8과 EUC-KR로 인코딩된 블로그간에 트랙백을 받거나 보낼때 글씨가 깨지게 된다. 이 hack은 다르게 인코딩된 블로그 사이의 트랙백이 깨지지 않게 하기 위한 것이다. UTF-8로 인코딩된 WordPress 2.1 버전을 기준으로 작성되었다.
새로운 버전의 워드프레스가 나왔을 때 대처하는 요령
이 포스트에 새로운 버전에 대한 파일이 올라오지 않았을 경우 예전 버전용 파일을 업그레이드한 워드프레스에 덧씌우지 마세요. wp-trackback.php 파일과 comment.php 파일만 예전 버전이므로 제대로 작동할리 만무할뿐 아니라 치명적인 오류를 유발할 수 있습니다. 새버전의 파일에서 포스트의 내용에 나온 부분만 수동으로 고치는 방법만이 안전합니다. 이 포스트의 소스를 Copy해서 에디터에 Paste 할 경우에 작은따옴표(‘)를 수정하셔야 합니다. mbstring 모듈 사용자는 wp-trackback.php 파일의 $charset에 EUC-KR을 추가함으로써 간단히 받는 트랙백 문제를 해결할 수 있습니다.
다운로드
WordPress 1.5.x용 : 링크
Wordpress 2.0.x용 : 링크
WordPress 2.1.0용 : 다운
Wordpress 2.1.3용 : 다운
WordPress 2.2용 : 다운
Wordpress 2.2.1용 : 다운
Wordpress 2.2.2용 : 다운
Wordpress 2.3부터 2.3.3용 : 다운
Wordpress 2.5용 : 다운
WordPress 2.5.1용 : 다운
다른 해결방법
영팔님이 약간의 hack이 필요한 플러그인을 만드셨습니다.
워드프레스 EUC-KR 트랙백 플러그인(HACK)
정태영님이 받는 트랙백용 플러그인을 만드셨습니다.
Korean Trackback Plugin
사용방법
받는 트랙백은 자동으로 변환된다.
보내는 트랙백은 트랙백 받는 블로그가 EUC-KR을 사용할 경우 트랙백 보내는 주소 앞에 !를 붙여서 사용한다.
Send trackbacks to: 의 트랙백 주소 적는 곳에 !http://트랙백주소 를 넣는다.
예) !http://www.windlike.net/blog/236/trackback/
2.0용 버전과 다르게 데이타베이스에는 !가 제거된 트랙백 주소만이 남는다.
같은 인코딩일 경우 그냥 트랙백 주소만 적는다. !를 붙여서 인코딩을 변환하면 오히려 깨진다.
예) http://www.windlike.net/blog/236/trackback/
상대의 인코딩을 알아내는 방법은 상대의 블로그를 열고 브라우져의 보기 – 인코딩 메뉴를 보면 알 수 있다.
[참고] 예전 버전들이 !를 제거하지 않고 데이터베이스에 기록한 이유는 인코딩을 잘못 선택하여 트랙백을 보냈을때 다시 보낼 수 있게 하기 위함이다. 즉 already pinged에 다르게 기록되므로 다시 보내는데 문제가 없다. 이번부터는 UTF-8 블로그에 !를 붙여서 보낸 경우 다시 보낼수 없지만(이미 트랙백을 보낸 주소이기 때문에) EUC-KR인 블로그에 !로 붙이지 않고 트랙백을 보냈다면 다시 !를 붙여서 보낼수 있다.(!를 붙이더라도 저장은 주소만 되므로 다시 보낼때 !가 붙은 주소를 다른 주소로 인식한다) 이 경우 already pinged에 같은 주소가 두개 존재하게 된다.
다른 문제점으로는 에디트 화면의 Trackbacks 폼에 !가 남아있다. PHP와 웹프로그래밍에 대한 이해가 부족하여 해결하지 못하였다. !를 지우고 다시 Save를 하면 사라진다.
주의사항
적용대상 :
- PHP 4.0.6 이상
- mbstring 모듈이나 iconv 모듈 둘 중 하나가 설치되어 있어야 함
확인방법 :
- 직접 호스팅 업체에 문의
- 다음 코드를 에디터를 이용하여 test.php로 저장한 후 브라우져에서 실행한다(미리 작성된 파일 : 다운)
<?php
echo 'PHP version: ' . phpversion() . '<br />';
if ( function_exists('mb_convert_encoding') ) echo 'mbstring OK!<br />';
else echo 'mbstring fail..<br />';
if ( function_exists('iconv') ) echo 'iconv OK!<br />';
else echo 'iconv fail..<br />';
?>
mbstring OK! 가 나오면 mbstring 모듈을 이용할 수 있다(둘 다 OK일 경우 이방법을 권장)
iconv OK! 가 나오면 iconv 모듈을 이용할 수 있다(mbstring fail 일 경우 이 방법으로 한다)
둘다 fail이면 호스팅 업체에서 둘 중 하나를 설치해 줄때까지 불가능하다
라이센스
WordPress가 GPL이기 때문에 이 hack 역시 GPL을 따른다. 수정 및 재배포 모두 가능함.
지금까지 도움주신 분들
아거님, 입명이님, H.Moon님, BluedSnow님, 지윤님, UNFGroup님, unfusion님, 영팔님
받는 트랙백핑 문제 해결(mbstring)
/wp-trackback.php를 열어 $charset에 EUC-KR을 추가한다
$charset = 'ASCII, UTF-8, EUC-KR, ISO-8859-1, JIS, EUC-JP, SJIS';
mbstring 모듈을 사용할 수 있을 경우 직접 수정해서 사용하면 편리하다.
받는 트랙백핑 문제 해결(iconv)
/wp-trackback.php를 열어
if ( function_exists('mb_convert_encoding') ) {
$title = mb_convert_encoding($title, get_settings('blog_charset'), $charset);
$excerpt = mb_convert_encoding($excerpt, get_settings('blog_charset'), $charset);
$blog_name = mb_convert_encoding($blog_name, get_settings('blog_charset'), $charset);
}
아래에 다음을 추가한다
elseif ( function_exists('iconv') ) {
if ( !seems_utf8($title) )
$title = iconv('EUC-KR', 'UTF-8', $title);
if ( !seems_utf8($excerpt) )
$excerpt = iconv('EUC-KR', 'UTF-8', $excerpt);
if ( !seems_utf8($blog_name) )
$blog_name = iconv('EUC-KR', 'UTF-8', $blog_name);
}
보내는 트랙백핑 문제 해결
/wp-includes/comment.php를 열어 trackback 함수를 찾는다
function trackback($trackback_url, $title, $excerpt, $ID) {
global $wpdb, $wp_version;
if ( empty($trackback_url) )
return;
$title = urlencode($title);
$excerpt = urlencode($excerpt);
$blog_name = urlencode(get_option('blogname'));
$tb_url = $trackback_url;
를 $blog_name = get_option(‘blogname’);이 두부분으로 나뉘어 수정되는것 주의하며 아래와 같이 바꾼다
function trackback($trackback_url, $title, $excerpt, $ID) {
global $wpdb, $wp_version;
if ( empty($trackback_url) )
return;
$blog_name = get_option('blogname');
if ( $trackback_url[0] == '!' ) {
$trackback_url = substr($trackback_url, 1);
if ( function_exists('mb_convert_encoding') ) {
$title = mb_convert_encoding($title, 'EUC-KR', 'UTF-8');
$excerpt = mb_convert_encoding($excerpt, 'EUC-KR', 'UTF-8');
$blog_name = mb_convert_encoding($blog_name, 'EUC-KR', 'UTF-8');
} elseif ( function_exists('iconv') ) {
$title = iconv('UTF-8', 'EUC-KR', $title);
$excerpt = iconv('UTF-8', 'EUC-KR', $excerpt);
$blog_name = iconv('UTF-8', 'EUC-KR', $blog_name);
}
}
$title = urlencode($title);
$excerpt = urlencode($excerpt);
$blog_name = urlencode($blog_name);
$tb_url = $trackback_url;