2011-04-21 3 views
2
'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">' 
+ SOME VARIABLE FULL OF TEXT 
+ '</textarea>' 

위의 내용은 javascript 함수 내부에서 div의 innerHTML 속성을 변경했을 때 사용하는 간단한 문자열의 일부입니다. 그 "변수의 일부 변수"는 그 변수가 자바 스크립트 해석 가능한 데이터 (해석 할 데이터) (예 : 덧셈 기호 또는 인용문)를 포함하는 문자열을 포함하면 문제입니다. 스크립트가 중단됩니다. 어떻게 이것을 피할 수 있습니까? 그건 그렇고, 변수는 각 사용자에게 동적이며, 그것은 php echo 문으로 채워져 있으므로 자바 스크립트에 백엔드에 삽입됩니다. 나는 이것을 다른 방법으로 성취 할 방법을 생각해 봤지만 아무도 마음을오고 있지 않습니다. 데이터는 데이터베이스에서 가져온 것으로 PHP로 가져오고 innerHTML을 통해 사용자 명령을 기반으로 페이지에 동적으로 작성되고 삽입되는이 텍스트 영역에 삽입해야합니다. 어떤 도움을 주셔서 감사합니다.자바 스크립트를 사용하지 않고 자바 스크립트를 사용하여 텍스트를 텍스트로 삽입

편집 : 요청 된 컨텍스트 기능 : 당신은 HTML과 작은 따옴표를 이스케이프 할 필요가 같은

else if (theChange == 'signature') { 
     document.getElementById('userPanelChangeBox').innerHTML = 
     '<form action="tinUser_processor.php" method="post">' 
     +'Signatures cannot contain any markup (HTML, BBCode, etc) or styling and can only be 4 lines<br />' 
     +'Enter your new signature:<br /><br />' 
     +'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">' 
     +'<?php echo $userInfo['signature']; ?>'+'</textarea><br /><br />' 
     +'<input type="hidden" value="signature" name="typeChange" />' 
     +'<input type="submit" value="Submit Change" name="submitter" /></form>'; 
     } 
+0

당신이 우리를 보여줄 수 PHP를 포함하는 문맥 – mcgrailm

+0

간단히 말하면, 인터프리터가 페이지에서 데이터를 표시 할 수 있도록 자바 스크립트 명령이나 따옴표를 명령으로 해석하지 않도록 동적 입력을 피하려고합니다. 사용자가이 기호 중 하나를 입력했을 수도 있습니다. ter. – linus72982

+0

예 - linus72982

답변

1

보인다. 당신과 같이,이 작업을 수행하기 위해 PHP의 내장 htmlentities 기능을 사용할 수 있습니다 :

<?php echo htmlentities($userInfo['signature'], ENT_QUOTES); ?> 
+0

나는 탈출과 같은 자바 스크립트 함수를 사용하는 것에 대해 생각하고 있었지만 자바 스크립트 연산자 등을 탈출하지 않는다는 것을 깨달았다. 그렇다면 addslashes를 사용하는 것에 대해 생각하고 javascript가 파싱 할 수있는 모든 것을 피할 수 없다는 것을 깨달았습니다. htmlentities가 작동 할 것입니다. 감사합니다. – linus72982

1

당신은 너무 늦기 클라이언트에서의 시간에 의해, 서버에서 HTML 엔티티 에 특수 문자를 변환해야합니다. 예 : 문자열에 삽입 할 때

"foo <= bar" 

다음

&ldquo;foo &le; bar&rdquo; 

과이된다하면된다 :

"&ldquo;foo &le; bar&rdquo;" 

보다는

""foo <= bar"" 

하는 명확 것이다 스크립트에 엉망 클라이언트. 유니 코드 이스케이프 시퀀스를 사용할 수도 있습니다.

+0

입력 해 주셔서 감사합니다. 이것은 제가 찾고 있던 것입니다. – linus72982

0

당신이이 (테스트) 작품, 그것은 다른 이유로 클라이언트에서 수행해야하는 경우 :

<textarea id=text></textarea> 
<script type="text/javascript"> 
var signature = "<div>Not actually a div.</div>"; 
document.getElementById('text').value=signature; 

그래서,이 같은 일이 (안된) 작동합니다

else if (theChange == 'signature') { 
    document.getElementById('userPanelChangeBox').innerHTML = 
    '<form action="tinUser_processor.php" method="post">' 
    +'Signatures cannot contain any markup (HTML, BBCode, etc) or styling and can only be 4 lines<br />' 
    +'Enter your new signature:<br /><br />' 
    +'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">' 
    +'</textarea><br /><br />' 
    +'<input type="hidden" value="signature" name="typeChange" />' 
    +'<input type="submit" value="Submit Change" name="submitter" /></form>'; 
    document.getElementById('userPanelChangeBox').textChange.value='<?php echo $userInfo['signature']; ?>'; 
    }