2014-01-21 5 views
-2

Ruby에서 HTTP 서버를 작성하기 때문에 특정 소스 코드 (HTML, JavaScript 및 Ruby)를 사용하는 브라우저에서 파일을 편집해야합니다. 나는 텍스트 영역의 값 텍스트 파일 내용을 넣어해야합니다 파일은 </textarea> 등의 특별한 하위 trings을 포함하는 경우텍스트로 텍스트 영역을 초기화하는 방법

"<textarea>__CONTENT__</textarea>".gsub('__CONTENT__',File.read(filename)) 

그러나이 작동하지 않습니다. 그래서 파일 내용에서 특정 대체물을 사용하여 데이터를 '준비'하려고했습니다. 그러나 파일에 HTML/Ruby 콘텐츠가 포함 된 소스 코드가 포함되어 있고 특히 내 HTTP 서버의 소스를 보내려는 경우 문제가 있습니다. 이 교체 체인은 양호한 것처럼 보입니다.

File.read(__FILE__).gsub(/&/,"&amp;").gsub('<',"&"+"lt;").gsub('>',"&"+"gt;") 

그러나 이것은 충분하지 않습니다. 파일에 \'이 포함되어 있으면 웹 브라우저에 문제가 있습니다! 텍스트 영역 (서버 측 및/또는 브라우저 측)에 텍스트를 배치하는 유용한 기술이 있습니까?

+0

텍스트 영역의 값을 js의 값으로 설정할 수 있지만 ""을 html로 하드 코딩 할 수는 없습니다. – dandavis

+0

당신은 이스케이프 처리 된 후 JS를 사용하여 페이지에서 이스케이프 처리 할 수 ​​있습니까? – dandavis

+0

프론트 엔드 (웹 브라우저)에서 자바 스크립트를 사용하고 백엔드에서 루비 (레일즈)를 사용하고 있을지도 모르겠지만 질문에 어떤 영향이 있는지는 분명하지 않습니다. – maerics

답변

1

CGI::escapeHTML은 문자열을 HTML 안전으로 "준비"합니다. 이중 백 슬래시 간단하게 : CGI :: escapeHTML (File.read (FILE)) 백 슬래시 문자를 제외한

:

# require 'cgi' 
CGI::escapeHTML(File.read(__FILE__)) 
+0

이것은 좋은 일이지만 이중 백 슬래시는 간단한 백 슬래시로 대체됩니다. diff (https://gist.github.com/raubarede/8547020)를 참조하십시오. – raubarede

+0

결과가 자바 스크립트 문자열로 전송 된 경우 (즉, Javascript로 구문 분석 될 경우 순수한 HTML 소스에 반대), 그렇다면 Javascript가 문자열을 구문 분석 할 때 역 슬래시를 이스케이프 처리합니다. 이 경우 문자열을 보내기 전에 백 슬래시를 두 개의 백 슬래시로 교체해야합니다. –

0

이 양식이 좋다.

발견 된 내용 : 서버 측, 백 슬래시를 & 99992로 바꿉니다.

CGI::escapeHTML(File.read(@uri).gsub('\\','&9999'+'2222;')) 

브라우저 측은 텍스트 부분을 "& 99992222; 백 슬래시 문자 :

var node=document.getElementById('textarea_1'); 
node.value=node.value.replace(/\&9{4,4}2{4,4};/g,String.fromCharCode(92)); 

은 & 99992222 아무 소스가 없음을 호핑; !

관련 문제