2010-05-02 8 views
4

텍스트 상자와 버튼이있는 간단한 간단한 양식이 있습니다. 목표는 비동기 요청 (jQuery : $ .ajax)을 사용하여 텍스트를 보내는 것입니다. 서버 (PHP는/MySQL은 라 Joomla) 그래서 데이터베이스 테이블에 추가 할 수 있습니다.Ajax에서 데이터베이스에 공백이있는 데이터를 가져올 수 없습니다. POST 요청

var value= $('#myvalue').val(); 

$.ajax({ 
    type:  "POST", 
    url:  "/administrator/index.php", 
    data:  { option: "com_mycomponent", 
        task: "enterValue", 
        thevalue: value, 
        format: "raw"}, 
    dataType: "text", 
    success: reportSavedValue 
}); 

사용자가있는 공간에 텍스트를 입력 할 때 문제가 발생한다 :

다음은 클라이언트로부터 데이터를 전송하는 자바 스크립트이다. 내가받은 $ _POST 변수는 모든 공백을 제거 했으므로 사용자가 " 이 문자열에 공백이 있습니다" "을 입력하면 서버는" Thisstringhasspaces "값을 가져옵니다.

저는 주위를 둘러 보았고 encodeURIComponent을 사용해야하는 많은 참조를 발견했습니다. 그래서 그것을 시도했지만 지금은 $ _POST에서 얻을 값은 "This20string20has20spaces"입니다.

따라서 은 공백 대신 제거 된 백분율 기호 만 있고 16 진수는 남겨두기를 기대합니다.

정말 혼란 스럽습니다. 이런 종류의 질문은 웹상의 모든 곳에서 묻고 대답하는 것 같습니다. encodeURIComponent은 은색 총알로 환영받습니다. 하지만 분명히 나는 ​​다른 종류의 라이칸 스롭과 싸우고있다. 누구든지 어떤 제안이 있습니까?

+1

나는 서버에서 일어나는 몇 가지 필터링이 있다고 생각합니다. 내 400 년 + 뱀파이어로 나는 문자열을 자동으로 보지 못한 적이있다. 클라이언트에서 (jquery 나 다른 어떤 것에 의해서) 선행/후행 공백을 제거했다. – karim79

+1

데이터를 간단한''당신의 Joomla 외부에 배치 된 페이지. – Cesar

+0

jquery의 버전은 무엇입니까? processData = false를 설정하십시오. 요청에. 도움이되지 않으면 서버의 잘못입니다. – Sergei

답변

1

내가 수행하고 있다는 것을 깨닫지 못하는 추가 필터링이 있음이 드러났습니다. 이것이 Joomla를 통해 모두 실행 되었기 때문에, $_POST['theValue] 대신 JRequest::getCmd('thevalue')을 사용하고있었습니다. 이 함수는 '%'와 같이 번거로운 문자를 모두 제거합니다. 필터링을 통해 더 제어 할 수 있습니다 getVar()에 대한 getCmd()을 무역,

var value = encodeURIComponent($('#myvalue').val()); 

그리고 서버 : 만장일치로 웹에 제안으로

그래서 최종 솔루션은 클라이언트에서 에 encodeURIComponent을 사용하는 것입니다 , urldecode()와 함께 :

$value = urldecode(JRequest::getvar('thevalue', JREQUEST_ALLOWHTML)); 

다시 Karim79 세자르에게 큰 감사를드립니다. 나는 그대에게 하커와 헬싱 (Helser and Helsing)이라고 불렀다. :)

0

시도해 볼까요?

var value = escape($('#myvalue').val()); 
+0

그래.나는 그것을 시도하고 var 값 = encodeURIComponent ($ ('# myvalue'). val());와 같은 결과를 가진다. - 서버가 모든 공백 대신 '20'값을 선택합니다. – TwainJ

관련 문제