블로그

[TatterTools] 리더보기 UTF-8 지원 (수정 버전)

태터툴즈 0.961 Countdown에서 자체적으로 제공하는 RSS리더는 아직까지 유니코드 UTF-8 인코딩을 지원하지 않아서, 대부분의 wordpress 기반 블로그를 읽을 수 없다는 단점이 있다.

간단하게 UTF-8을 지원하는 코드 작업을 해봤다.

* 어제 작성한 코드에 버그가 있어서 tt_xml_parser_into_struct() 함수에 한 줄 추가하였다. DB에서 “delete from t3_tts_rss_item;”을 실행하여 수집되어 있는 RSS 항목을 삭제하고 리더보기에서 T를 눌러 새로 RSS를 수집한다.

1) inc_function.php의 xml_parser() 함수와 tt_xml_parser_into_struct() 함수를 변경한다.

1. xml_parser()

function xml_parser($url, $mdate) {
if ($mdate == “0”) $mdate = “”;list($header, $body, $lmdate) = @get_remotefile($url, $mdate);

$st = get_sock_status($header);
// modified by terzeron
$encoding = “”;

if ($st == 200) {
// modified by terzeron
//if (strpos($body,”encoding=”UTF-8″”)) error_process(“02B5”);
if (strpos($body, “encoding=”UTF-8″”) or
strpos($body, “encoding=”utf-8″”))
$encoding = “utf-8”;

$vals = tt_xml_parser_into_struct($body, $encoding);
}
return array($st, $header, $body, $lmdate, $vals);
}

2. tt_xml_parser_into_struct()

function tt_xml_parser_into_struct($body, $encoding) {
$h_set = array();
$r_set = array();while ($n1 = strpos($body, ““);
if (!$n2 || $n1 > $n2) break;
$stamp = get_timestamp2();
$cval = substr($body, $n1+9, $n2-$n1-9);
// modified by terzeron
$temp_cval = $cval;
if ($encoding == “utf-8”)
$temp_cval = iconv(“utf-8”, “euc-kr”, $cval);
$body = str_replace(““, $stamp, $body);
$h_set[$stamp] = trim($temp_cval);
}

$b_set = explode(“<", $body); foreach ($b_set as $k => $row) {
$inp = array();
$att_set = array();

$row = trim($row);
if (!$row) continue;

if (substr($row,0,1)==”/”) {
if (strpos($row, “item”)) { $inp[tag] = “ITEM”; $inp[type] = “close”; array_push($r_set, $inp); }
continue;
}

list($tag_inf, $val) = explode(“>”, $row);
// modified by terzeron
if ($encoding == “utf-8”)
$val = iconv(“utf-8”, “euc-kr”, $val);

이하 생략

2) 추가적으로 admin/reader_opml_import.php에서 tt_xml_parser_into_struct() 함수를 호출할 때, “” 파라미터를 하나 더 추가해줘야 한다.

$xmlinfo = tt_xml_parser_into_struct($fvalue, “”);

댓글 6개

답글 남기기