모바일 블로그 수정 2 (2015-05-04)

Writer  
   achor ( Hit: 344 Vote: 0 )
Homepage      http://achor.net
BID      기타

1.
좀 더 보다 보니 몇 가지 문제가 있더라.
내가 아닌 Twitter나 Naver, 조선일보 등의 문제.


2.
일단 Twitter의 문제는,
한글이 포함된 URL을 정확히 발라내지 못한다는 점이었다.

모바일 블로그 수정 2

아랫 그림의 파란색 부분인 http://outstanding.kr/100 만으로 특유의 t.co 단축 URL을 생성하고 있어서
트위터의 링크된 경로로 og를 분석하는 내 모바일 블로그, http://achor.net/blog 또한 오류를 피할 수 없었다.

사실 Twitter 정도의 급이 이 같은 문제를 갖고 있다는 게 새삼 놀라웠다.
특히나 Tistory 등에서의 한글로 된 URL은 이미 오래 됐고, 너무도 흔한데
그 수많은 링크들을 보면서 아직 수정돼 있지 않다는 것이 더욱 놀라운 일이었다.

참고로 정규식으로 URL을 잡아내는 많은 방식들이 있는데
이를 비교한 것이 있어 옮겨 놓는다.
https://mathiasbynens.be/demo/url-regex
나는 @diegoperini 의 것을 기반으로 쓰고 있고, 당연하게도 예의 한글 URL이든 뭐든 잘 잡아낸다.

Twitter의 제목+URL로 구성되는 내 Tweet은 php에서 아래와 같은 패턴으로 쓰고 있다.


$pattern="_(.*)((?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]-*)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/\S*)?)_iuS";



3.
Twitter가 나를 꽤나 고생시키긴 했지만
다양한 측면에서의 고생은 단연 Naver다.

어제 고생했던 가변적 이미지 URL 건은
확인된 사항은 아니다만,
가만히 생각해 보니 블로그나 카페 등 UCC에서의 저작권 침해 가능성에 대한 방어적 측면이 아닐까 하는 생각은 들었다.
책임 소재가 명확한 신문기사 등과는 다른 정책이 그 반증일 듯 싶더라.

뭐 아무튼, 나름의 이유는 있겠지 하며 넘어갔었는데,
오늘은 사라져 버린 me2day의 망령 같은 me2.do 단축 도메인으로 고전했다.

다른 단축 도메인들은 최종 redirect까지 별다른 문제 없이 도달하는 것과 달리
me2.do만은 scottmac의 opengraph가 파고 들지 못한 채 관련 정보 없는 것으로 리턴하고 있었다.
(아. 네이버. -__-;)

후딱 stackoverflow 살펴 보고 function 하나 만들어 처리.

function findRealUrl($url) {
$redirect = '';
$urlToQuery = $url;
$urlParts = parse_url($urlToQuery);
$host = $urlParts['host'];
$path = $urlParts['path'];
$address = gethostbyname ($host);
$socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect ($socket, $address, 80);
$request = 'GET '.$path.' HTTP/1.1'."\r\n";
$request .= 'Host: '.$host."\r\n";
$request .= 'Connection: Close'."\r\n\r\n";
socket_write($socket, $request);
$answer = socket_read($socket, 8192);
socket_close($socket);
$answerLines = explode("\r\n", $answer);
foreach ($answerLines as $line) {
$lineParts = explode(':', $line, 2);
if($lineParts[0] == 'Location') {
$redirect=trim($lineParts[1]);
break;
}
}
return $redirect;
}



4.
DOM 읽어오는 데 한글 깨지는 문제로 어제부터 고생이 많았다.
일단 모든 이들이 charset를 title 이전에 먼저 써주면 참 좋을 듯 싶은데
그렇게 해줄 리 없겠고,

실제로 나 또한 2011년 전까지는 title을 먼저 써왔기도 했다,
http://achor.net/board/diary/1405
facebook 디버거에서 한글이 깨지는 이유로 엄청난 고생을 한 후에야 charset을 먼저 쓰기 시작했으니.
https://developers.facebook.com/tools/debug/

자, 일단은 내가 현재까지 내린 방안은 이거다.

if(mb_detect_encoding($HTML, "auto")=='UTF-8') $HTML='<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'.$HTML;
elseif(preg_match('//u', $HTML)) $HTML='<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'.$HTML;
elseif(iconv("EUC-KR","EUC-KR",$HTML)==$HTML) $HTML='<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">'.$HTML;
$doc = new DOMDocument('1.0', 'UTF-8');
$doc->loadHTML($HTML);


척 보기에도 빈틈이 보이긴 하겠다만
일단 euc-kr을 쓰면서 title을 charset 보다 먼저 설정해 놓은 조선일보 등 대개의 신문사는 문제 없고,
(중립적 관점에서, 한겨례는 charset을 먼저 설정하고 있다)
IT 좀 아는 utf-8의 한글 사이트도 대개는 문제 없거니와
한글 URL로 많은 고생을 시킨 outstading도, 해외의 주요 사이트도 문제 없긴 하다.

다만 적나라하게 귀납적이라
앞으로도 계속 발생되는 에러를 보며 수정해 나갈 계획이긴 하다.


5.
혹 검색을 통해 나를 전혀 모를 누군가가 이 글을 볼 것에 대비하여 끝으로 한 마디 하자면,

코드 후지다고 비난 마라.
취미로 하는 개발 치고 이 정도면 됐지, 뭘 더 바래! -__-;

니가 아는 것을 모든 이가 다 아는 것은 아니니
내 뒤늦은 경험과 깨달음이 누군가에겐 도움이 될 수도 있다란 것을 이해해 다오.

- achor


본문 내용은 3,423일 전의 글로 현재의 관점과 다를 수 있습니다.

Post: https://achor.net/board/diary/1619
Trackback: https://achor.net/tb/diary/1619
RSS: https://achor.net/rss/diary

Share 밴드공유 Naver Blog Share Button
Facebook에서 보기 
Twitter에서 보기 

Login first to reply...

Tag
- 모바일: 스페인 출장 (2011-02-08 01:31:51)- 홈페이지: Backup (2009-04-02 02:30:01)

- 웹개발: jQuery를 활용한 XML data island 변경 (2013-11-16 22:50:04)- 웹개발: Smart Phone User Agent (2010-04-17 20:28:19)

- 모바일: 아내의 iPhone (2010-04-18 10:06:00)- 웹개발: CKFinder를 활용한 웹앨범 제작 방법 (2011-05-24 19:10:17)

- 웹개발: jQuery 기본 (2013-11-12 16:23:02)- 홈페이지: 아처제국 미러사이트 (2014-12-30 01:24:09)

- 홈페이지: 조회수 오류 (2015-12-26 23:01:16)- 모바일: 모바일 블로그 오픈 (2015-03-09 01:10:19)



     
Total Article: 1957, Total Page: 272
Sun Mon Tue Wed Thu Fri Sat
          1 2
3
모바일 블로그 수..
4
어벤져스 에이지..
모바일 블로그 수..
5
어린이날
6 7 8
시윤의 편지
 사랑하는 시윤에..
시준의 편지
9
피카소 상
지르다, Dell Ultr.. [1]
10
단통법 이후 휴대..
11 12 13 14 15
근무 환경
16
관악산
17
신도림역
18 19 20
New Comer
21 22 23
그네
고 노무현 전.. [1]
24
차이나타운
미술관 방명록
25
부천 자연생태공..
26 27 28 29 30
31
무료 클라우드를..
           

  당신의 추억

ID  

  그날의 추억

Date  

  Poll
Only one, 주식 or 코인?

주식
코인

| Vote | Result |
First Written: 09/27/2001 13:51:56
Last Modified: 09/06/2021 17:51:19
추천글closeopen