2014-05-15 6 views
1

HTML- 텍스트 영역의 데이터를 데이터베이스에 삽입하는 JSP로 전송합니다.Java2Javascript에서 u000D u000A의 적절한 변환

페이지가 다시로드되면 데이터베이스 레코드는이 텍스트 영역과 JavaScript 변수에 저장됩니다. 변수는 사용자가 텍스트 영역의 값을 변경했는지 여부를 결정하는 데 사용됩니다.

자바 스크립트의 테스트 절차는 아주 기본적인이며 대부분의 시간을 작동합니다

if(orig_info != document.getElementById('info').value) 
//Something has changed! 

는 이제 어떤 경우에는 아무것도 호출되는 변화 과정을 변경되지 않은 경우에도 것을 발생합니다. 나는 텍스트 영역과 변수를 파이어 버그 (firebug)로 검사했고 그것은 같은 텍스트이다. 홀수, 그래서 양 문자열의 길이 판독 : 아직

document.getElementById('info').value.length 231  
orig_info.length        235 

내가 4 개 문자의 차이를 볼 수 없었다 그래서 I 간단한 산출했다 : 편지의 문자 - 숫자, 문자, Unicode16 및 가지고 있음 : 우선 하나는 텍스트 영역입니다 : document.getElementById('info').value, 두 번째는 orig_bemerkung

61 |. |\u002E| 61 |. |\u002E 
62 | |\u000A| 62 | |\u000D 
63 |1 |\u0031| 63 | |\u000A 
        64 |1 |\u0031 

지금 나는 그것이 \u000D\u000A와 이전 문제의 참조 변수를합니다.

어떻게 해결해야할지 모르겠다. 서버에서 나는 다음과 같은 코드를 작성합니다 :

ret.append("\ndocument.getElementById('info').innerHTML='").append(StringEscapeUtils.escapeJavaScript(this.getInfo())).append("';"); 

ret.append("orig_info = '").append(StringEscapeUtils.escapeJavaScript(this.getInfo())).append("';\n"); 

return ret.toString(); 

정확히 동일한 코드가 사용 된 경우에도 텍스트 영역은 변수와 다른 내용을 처리합니다. 누군가가 전에 텍스트 영역에 Enter를 사용 했는데도 orig_infodocument.getElementById('info').value 인 문제를 해결할 수 있습니까?

답변

1

HTML 양식 게시물에 대한 규칙은 명시 적으로 사용자가 입력 한 어려운 줄 바꿈에 대해 CR-LF 쌍으로 값을 전송해야한다고 명시합니다. 브라우저 (모두 내가 생각하기에 더 최신 IE 버전이라도)는 LF만으로 표시된 하드 줄 바꿈을 사용하여 <textarea> 값을 JavaScript 코드로 반환합니다.

값을 직접 변환하여이 기괴함을 설명 할 수 있습니다. 다음과 같은 내용입니다.

function realValue(textareaValue) { 
    textareaValue = textareaValue.replace(/([^\r]|^)\n/g, "$1\r\n"); 
    return textareaValue; 
} 

// ... 

var xmitValue = realValue(someTextArea.value); 
+1

좋은 생각입니다. 이제는 쉬운 방법으로 변경했습니다. 'orig_info = document.getElementById ('info'). value.replace (/ ([^ \ r] | ^) \ n/g, "$ 1 \ r \ n") ; ' 나머지는 전송 방법이 다르기 때문에 더 큰 거래이지만 내 문제가 해결되었습니다. 고맙습니다! – Qohelet

+0

네, 괜찮습니다. 나는 단지 명백한 모범을 보려고 노력했을 뿐이었다. 다행 이네; 나는 웹 프로그래밍 세계의이 특별한 이상한 부분이 왜 그리 주목을 끄는 지 모르겠다. – Pointy

+0

불행히도 당신이 옳습니다. 지난 몇 개월 동안 나는 논리가 부족하다고 생각했지만 해결책을 찾지 못했습니다. 오늘 나는 문자열을 수동으로 비교하기 시작했다. 내 생각에 98 %의 경우 CR-LF는 문제가되지 않거나 아무도 실제로는 차이가 나는 장비를 사용하기 때문에 (예전 프린터와 마찬가지로) 관련이 없습니다. 적어도 지금은 2 %입니다.) – Qohelet