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

작성자  
   achor ( Vote: 6 )
분류      기술

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에서 아래와 같은 패턴으로 쓰고 있다.

1
2
$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 하나 만들어 처리.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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/

자, 일단은 내가 현재까지 내린 방안은 이거다.
1
2
3
4
5
6
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,610일 전의 글로 현재의 관점과 다를 수 있습니다.

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

카카오톡 공유 보내기 버튼 LINE it! 밴드공유 Naver Blog Share Button

Name
Password
Comment
reCaptcha



Tag
- 홈페이지: 홈페이지 복구 (2012-12-05 11:29:05)- 홈페이지: (아처) Homepage Ver 1.2 (1999-11-08 15:44:08)

- 웹개발: 설 연휴를 보내고... (2015-02-23 02:04:10)- 홈페이지: 야동마케팅 (2009-02-03 19:29:09)

- 홈페이지: 관련글 (2010-03-22 01:22:57)- 홈페이지: 전격공개! achor Empire ver1.0 (2000-08-20 15:18:23)

- 홈페이지: PHP 7.0.7 업데이트 (2016-08-04 16:34:26)- Facebook: Blog, SNS로 돈 버는 방법 (2011-02-03 05:45:18)

- 프로그래밍: 운명의 동전 (2001-10-17 04:39:41)- 홈페이지: (아처) Homepage를 공부하며... (1999-11-08 15:52:00)


번호
분류
제목
작성일
조회수
추천
41기술 특허 등록 현황2017/06/279550
40기술 머신러닝2017/05/129400
39기술 스타필드 하남2017/02/218990
38기술 11.112016/11/139690
37기술 Good Job [2]2016/09/2614730
36기술 CMD 지식포털2016/09/2016350
35기술 포켓몬고 피카츄2016/07/1310930
34기술 Google Now2016/04/0614660
33기술 조회수 오류 [1]2015/12/2612560
32기술 테스트2015/11/0620720
31기술 리니지2 프리서버 [77]2015/11/024019231
30기술 무료 클라우드를 통한 최적 데이터 백업 방법2015/05/3116470
29기술 단통법 이후 휴대폰 구매에 대한 고찰2015/05/1014630
28기술 지르다, Dell UltraSharp U2412M [1]2015/05/0912600
27기술 모바일 블로그 수정 22015/05/0557046
26기술 모바일 블로그 수정2015/05/0314910
25기술 좋은 게임을 만들고 싶다면... [1]2015/03/1463472
24기술 모바일 블로그 오픈2015/03/0919491
23기술 제2회 IndieWeb Meetup2015/03/011259336
22기술 설 연휴를 보내고... [1]2015/02/2321363
1 2 3 4

  당신의 추억

ID  

  그날의 추억

Date  

First Written: 09/27/2001 13:51:56
Last Modified: 03/04/2025 12:32:03