드디어 3개월에 걸친 나의 고민을 타파해서
블로그에 글을 안 남길 수 없다.
카카오톡뿐 아니라 그동안 개행문자때문에 데이터 가공에 고생했던 나날들이 떠오른다.
얼마나 미개하게 했었는지 서술한다. 카카오톡 대화를 내보내기 하여 KakaoTalkChats.txt을 보면
2019년 7월 2일 오전 7:52, 아이디 : 네~ 감사합니다~^^ 그리고 항상 잘 읽고 있습니다 |
엔터키가 눌려진 대화를 저장하기 위해 배치 스크립트를 돌리려면
이거 처리하기가 너무 골치가 아픈거라...
방법1) 배치파일로 문서 파싱하는 툴을 써서(필자의 경우는 오토핫키) 임시 변수에 현재 행의 데이터 중 시간과 아이디를 임시 저장한다. 그리고 다음 행의 데이터를 읽을 때, 아이디의 특수한 값이 감지되지 않으면 '이전 날짜값저장변수+데이터'를 새로운 텍스트에 저장한다. 그러면 가공된 데이터는 아래와 같이 변경된다. |
2019년 7월 2일 오전 7:52, 아이디 : 네~ 감사합니다~^^ 2019년 7월 2일 오전 7:52, 아이디 : 그리고 항상 잘 읽고 있습니다
|
이런 미개한 방법으로 수백~천라인의 데이터가 리패키징 되는 과정을 처리하며 PC자원과 시간의 낭비를 했다.
이과정은 DB에 입력할 라인을 무수히 증가시켰지만,
일단 변환된 텍스트를 db에 밀어넣는건 개꿀이다. (하지만 DB에 밀어넣을때도 년,월,일,ID,내용 파싱하고 insert할 값으로 변환하는데 PC자원을 사용하므로 이중 자원의 소비를 했다)
이 방법의 가장 큰 장점은 PHP로 Web에 출력할 때, 뉴라인을 고려하지 않아도 된다.
<td>테그를 써서 라인이 구별되는 편리함 때문에 이 방법을 고수해왔다.
(사실 더 미개한 이야기지만 매일의 대화를 저장한 것을 날짜.html 파일로 만들어 보관하고 있었다.
데이터 서칭은 포기한 셈. 그러다가 추후 피땀흘려 mysql과 php연동을 웹상에서 하게 되었다.)
매일 카톡을 실행하고 대화내용 내보내기를 해서 DB에 넣는 노가다 뛰는것도 힘들었지만, 카카오톡 유저들이 말하고 삭제하면 삭제된 메시지로 기록된다. 이에 노이로제가 걸려 다음의 방법을 생각하게 된다. 그런데 이 마저도 KaKaoTalkChats.txt 를 별도로 불러와서 '삭제된 메시지'를 손으로 끼워맞추며 천문학적인 시간을 데이터 복원 작업에 쓰는 미개함을 보여주었다. 그러다가 문득 든 생각.
방법2) 카톡봇을 이용해서 데이터를 만든다. 아예 DB에 밀어넣기 쉬운 방법으로 '날짜','ID','내용'으로 저장하겠다. 그 결과는 다음과 같다. |
'2019-08-05 08:42:53', '아이디', '오늘도 즐거운 하루되세요~ 올여름 잘보내세요~~^^' |
이 지랄과 같이 되었다. 그렇다 나의 불찰...
그렇게 방법1에서 오토핫키까지 쓰며 고민했던 내용을 고스란히 잊어버리고 같은 실수를 반복했다.
개행문자가 없으면 정상적으로 '날짜','ID','내용'이 저장되겠지만..
개행문자가 있을때는
첫 줄이 작은따옴표를 만나지 못하고 오류, 두번째 줄도 오류.....결과는 두 값 모두 입력안됨
그래서 포기하고 있었는데, 생각해보니 입력받는 내용에
방법2-2) 개행문자를 Replace해주면 되겠네?
하지만 javascript상에서도 \n은 개행문자로 인식한다 → \\n으로 넣으면 비로소 \n으로 텍스트가 저장된다. 추가적으로 ' 문자와 (\문자는 정규식도 잘 안먹어서 그냥 포기) a=msg.replace(/\n/g,'\\n').replace(/\'/g,"\'\'") |
'2019-08-05 08:42:53', '아이디', '오늘도 즐거운 하루되세요~\n올여름 잘보내세요~~^^' |
이렇게하면 DB엔 완벽히 개행문자로 들어가고 출력도 된다.
하지만 마지막문제, 왜 Web상에서는 개행문자가 적용이 안되고 공백문자로 space로 나올까?
오래지않아 view-source로 그 원인을 알 수 있었다. 진짜 html 소스코드에 개행이 되어 있었다!
오랜 경험으로 html에서 개행문자는 <br></br>임을 알고 있다!
그러면 php 작성을 손봐야 하는구나!
검색어는 php new line to br
http://docs.php.net/manual/kr/function.nl2br.php
최종 성공 sql쿼리를 돌려 얻은 값을 nl2br함수로 한번 더 감싸줌 echo nl2br($content); |
이제 맘 편히 데이터를 저장할 수 있게 되었다.
더 이상 불편한 행동을 하지 않아도 된다.
너무나도 행복하다.
'Programming > WEBWASDB' 카테고리의 다른 글
Powershell SecureString을 PHP에서 사용하려면 (0) | 2020.06.11 |
---|