Elixir의 유니 코드 작업에서 JS의 "SyntaxError : ''string literal contains an unescaped line break'를 피하십시오.

6189 단어 ElixirPhoenix
fukuoka.ex 대표 piacere
이번에도 봐 주셔서 감사합니다

이번에는 수수함에 있는 경우에 임의의 웹 입력을 JavaScript로 표시하면 JavaScript가 오류를 일으켜 실행부전을 일으키는 것을 Elixir측에서 회피하기 위한 기술을 소개합니다.

 お知らせ:LINE Fukuokaで、Elixir MeetUpを8/24に開催します 

「fukuoka.ex#13:여름의 fukuoka.ex 축제=기술의 패러다임 시프트」 을 LINE Fukuoka에서, 8/24(금) 개최입니다



fukuoka.ex의 1년의 활동·실적을 총괄해, 향후의 방향성을 나타내는 중요한 MeetUp이기도 하므로, 아무쪼록 라이브로 이 자리에 입회해 주세요
htps // // 후쿠오카에 x. 곤파 s. 코 m/에ぇぇt/89472/

이번 세션에서는 LINE에서 첫 Elixir 등단 참전에서 미러칩 아담씨가 Clova(LINE AI 어시스턴트 스피커) 개발을 위해 작성한 Elixir 라이브러리 "Clova"에 대해 등단합니다.

저는, 이 반년의 「fukuoka.ex 축제」의 중간 성과·실적 발표 LT와, 「2020년까지 후쿠오카를 「엔지니어의 낙원」으로 하려면?」 세션의 2개를 전달합니다

자바 스크립트에서 수수께끼 오류



DB와 API에서 얻은 데이터를 JavaScript로 표시하거나 CSV 다운로드를 시도하면 브라우저가 다음 JS 오류를 뱉고 잘 작동하지 않는 경우가 있습니다.
SyntaxError: '' string literal contains an unescaped line break

디버그 콘솔에서도 아무것도 표시되지 않거나 "·"만 표시되며 오류의 원인은 잘 모르지만 잘못된 문자가 있다는 것은 오류 메시지로 추측 할 수 있습니다.

오류의 원인은 "U+2028"과 "U+2029"



에러 발생 개소를 바이너리 덤프하면, 「U+2028」나 「U+2029」라고 하는, 별로 익숙하지 않은, Unicode 문자가 혼재하고 있는 경우가 있습니다

U+2028/U+2029가, 누군가라고 하면, 「Unicode의 개행 문자」와 같이, ASCII 코드로 말하는 곳의, 「CR(0x0D, U+000D)」나 「LF(0xA, U+000A) )'와 비슷한 문자인 것 같습니다.

정확하게는, U+2028이 「LS(Line Separator)」=「행 분할」이고, U+2029가 「PS(Paragraph Separator)」=「단락 분할」이라고 합니다

많은 브라우저의 JavaScript에서는, 이 「Unicode의 개행 문자」는 취급할 수 없어, 에러가 되는 것 같습니다

U+2028/U+2029가 어디에서 혼입되는가?



아무래도, 임의의 Web 입력을 할 때, Word등의 오피스 문서로부터 코피페를 실시했을 경우, 개행 문자로서, U+2028/U+2029가 혼입하는 것 같습니다

Elixir에서 유니코드 문자 삭제



DB나 API로부터의 데이터 취득을 Elixir로 실시하고 있는 경우는, Elixir로 이하와 같이 U+2028/U+2029를 Unicode로서 지정해, 삭제하는 것으로, JavaScript측에서의 처리시에 에러를 발행하지 않는다 할 수 있습니다.

index.html.eex
data |> String.replace( "\u2028", "" ) |> String.replace( "\u2029", "" )

만약 개행으로 변경한다면, 다음과 같이 하면 OK입니다

index.html.eex
data |> String.replace( "\u2028", "\n" ) |> String.replace( "\u2029", "\n" )

p.s.「좋아요」 잘 부탁드립니다



원한다면 페이지 왼쪽 상단의 또는 을 클릭하십시오.

좋은 웹페이지 즐겨찾기