2010-06-03 3 views
2

성가신 뇌 마비 문제. 두 번 내 PHP가 확인 여기내 jQuery와 PHP는 같은 결과에 대해 다른 결과를 제공합니까?

$('textarea#itemdescription').keyup(function() { 
    var charLength = $(this).val().length; 
    // Displays count 
    $('span#charCount').css({'color':'#666'}); 
    $('span#charCount').html(255 - charLength); 

    if($(this).val().length >= 240){ 
     $('span#charCount').css({'color':'#FF0000'}); 
    } 
    // Alerts when 250 characters is reached 
    if($(this).val().length >= 255){ 
     $('span#charCount').css({'color':'#FF0000'}); 
     $('span#charCount').html('<strong>0</strong>'); 

     var text = $('textarea#itemdescription').val().substring(0,255) 
     $('textarea#itemdescription').val(text); 
    } 
}); 

그리고있다 :

나는 문자열 (주로는 JS 일뿐만 아니라 자릅니다) 자바 스크립트를 heres 하나의 길이를 확인하는 두 가지 기능을 가지고

if(strlen($_POST["description"])>255){ 
    echo "Description must be less than ".strlen($_POST["description"])." characters"; 
    exit(); 
} 

jQuery Ajax를 사용하여 텍스트 영역의 값을 게시하고 있습니다. 그러나 내 PHP 유효성 검사 strlen() 내 js 본질적으로 말하는 것보다 더 오래 말합니다. 예를 들어 솔리드 문자열을 입력하면 0 또는 3 문자가 255까지 남았습니다. 그런 다음 저장을 클릭하면 PHP는 길이가 261이됩니다.

아이디어가 있습니까?

js가 다르게 읽거나 누락되는 특수 문자, 비트 크기와 관련이 있습니까? 아니면 다른 것과 관련이 있습니까? ! 아마 그 병이 오늘 ... : P

업데이트 : 내가 통과 된 것을 볼 수 var_dump($_POST['description']) 을 추가하고 탈출 예를 들어, 슬래시 복귀했다 무슨 일이야? 나는 stripslashes()를 추가하려고 시도했다. 아무 소용이 없다 ... 그들은 어디에서 오는가?

업데이트 2 - 문제가 해결 :

는 기본적으로 난 그냥 내 서버를 실현 생각 마법 따옴표를 지금 처리하기 전에 GRR ...에 그래서 제거 한 슬래시되어 있습니다. 짜증나는 작은 조각 그러나 그것은해야 할 것이다!!

도움 주셔서 감사합니다.

감사합니다, 스테판

당신이 실제 POST를하고 특히 당신이 당신의 프런트 엔드 코드의 더 게시 된 경우 도움이 될
+0

.val() 대신 .html()을 사용하면 어떻게됩니까? – Gelatin

+0

불행히도 작동하지 않습니다! –

답변

4

이 당신의 PHP 스크립트에서 사용하여 단순히 디버깅하는 가장 쉬운 방법 : 당신은 또한 이스케이프 코드, 특수 문자 코드 등을 확인하기 위해서는 브라우저에 소스보기를 사용하는 것이 좋습니다 var_dump($_POST['description']

을 ..

+0

나는이 일을 한 후에 거기에 추가 된 슬래시가 있음을 알고있다. 나는 db에서 의심하고있다! 고맙습니다! –

+0

'magic_quotes' 설정이 아마도 켜져 있습니다. 필자는 보통 php.ini 파일에서 이것을 끄고 내 데이터 위생을 수행합니다. 'stripslashes()'가 작동하려면 변수에 결과를 저장해야합니다 : $ description = stripslashes ($ _ POST [ 'description']);'그 후에는 $ _POST [ ' description ']을 $ description에 사용합니다. – loginx

+0

감사합니다. 아, 글쎄 내 서버 친구들과 연락해야 해! 나는 내 자신의 모든 striplashes와 addslashes를 스스로한다. 그래서 그 사실을 알고 있으면 지금 도움이됩니다. 그것은'if (strlen (stripslashes ($ _ POST [ "description"]))> 255) {'수표를 위해 잘 작동합니다! 다시 한번 감사드립니다. :) –

1

. 즉, 매번 키 입력이 호출되는지 확인 하시겠습니까? 사용자가 상자에 텍스트를 붙여 넣기 만하면 여전히 확인 된 것입니까?

JavaScript는 문자열이 주어진 길이보다 짧지 않을 것이라고 보증하기에 충분하지 않습니다. 사용자는 자바 스크립트를 사용하지 못하도록 할 수 있으며 잘 아는 "사용자"는 255자를 초과하는 자체 POST 요청을 보낼 수 있습니다.

+0

Yehp 필자는 충분한 테스트가 완료되었다는 것을 알기 위해 테스트를 충분히 마쳤습니다. 따라서 마우스 오른쪽 버튼으로 붙여 넣기를하면 바이 패싱됩니다. 따라서 PHP 유효성 검사는 유효성 검사의 차이 때문에 사용자를 혼란스럽게합니다. 이상적이지 않습니다. –

1

자바 스크립트를 사용하여 유효성을 검사하는 동안 무시되는 줄 바꿈 (텍스트 영역 사용이라고 함)이 거의 없다고 생각합니다.

1

나는 당신의 문제를 일으키는 2 가지를 본다.

  • 우선 substring(0,255) 256 자
  • 둘째 magic_quotes PHP에서 켜져있을 수 있습니다를 반환합니다.INI는, PHP는 문자열을 탈출 제공하기 위해 시도하지만

편집

는, 첫 번째하지만 magic_quotes하는 수 있습니다에 무시 문자열 정의를 다시 읽어 didnt는 DOH 그것은 바로 모든 시간을하지 않습니다 그 중 하나를 확인하십시오

1

UTF-8 인코딩을 사용하는 경우 PHP strlen()은 문자가 아닌 바이트를 계산합니다. ASCII가 아닌 것이 있으면이 일이 일어납니다. mb_strlen()을 사용하십시오. 매직 인용 부호는 몇 개의 문자를 추가 할 수 있습니다.

관련 문제