2011-01-13 3 views
0

MP3 파일을 업로드하는 형식으로 파일 입력이 있지만 파일 이름에서 내 시스템의 예약 문자를 감지하고 싶습니다. @ 또는 기타.자바 스크립트로 일부 예약 문자 감지

내가 찾은 모든 코드는이 문자를 대체하지만 사용자에게 알리기 위해 탐지하려고합니다. 나는 정규 표현식으로는 쉬울 것이라고 생각하지만, 나는 그것에 대해 모른다.

저는 JQuery/Javascript를 사용하고 있습니다. 사용자가 서버에 MP3 파일을 업로드 할 수있는 CodeIgniter의 응용 프로그램에서 작업

미안 :

편집 내 문제 설명을 향상시킬 수 있습니다. jQuery를 사용하여 클라이언트 측 양식을 관리합니다. CI 업로드 클래스는 파일 이름의 공백을 밑줄로 변환하며 모든 것이 작동합니다. 그러나 응용 프로그램을 테스트 할 때 이름에! (!)가 포함 된 MP3 파일을 업로드했는데 문제가 발생했습니다.

사용자의 파일 이름에 (!) (또는 나중에 추가 할 다른 파일)이 포함되어 있는지 평가하기 위해 파일을 업로드하기 전에 자바 스크립트 조건을 삽입하기 만하면됩니다. 만약 그렇다면.

+0

어떤 시스템입니까? 다른 OS에는 서로 다른 잘못된 문자가 있습니다. – Jeff

+2

자바 스크립트는 클라이언트 쪽입니다. 즉, 클라이언트가 액세스 할 수 있음을 의미하므로 코드를 무시할 수 있으므로 안전하지 않은 경우 PHP에서 @pekka가 말하고 유효성 검사/위생 처리를 허용해야합니다. 결과를 수정하기위한 액세스. – RobertPitt

답변

1

이 작업을 수행하는 한 가지 방법은 입력 필드의 실제 값을 encodeURIComponent으로 인코딩 된 값과 비교하는 것입니다. 동일하면 파일 이름이 안전합니다.

그러나 브라우저가 파일 이름을 전혀보고하지 않을 수도 있음을 알고 있어야합니다. 내 플러그인은 값이 반환되지 않으면 true을 반환하여 이에 응답합니다. 이것은 가치가 설정되지 않았다는 것을 의미 할 수도 있습니다.

jQuery 플러그인은 :

(function($) { 
    $.fn.fileNameIsValid = function() { 
     var val = this[0].value.replace('C:\\fakepath\\', ''); 

     return !val || encodeURIComponent(val) === val; 
    } 
}(jQuery)); 

그런 다음 그래서이를 호출 할 수

if ($('#yourFileInput').fileNameIsValid()) { 
    // filename validates 
} 
+0

안녕하세요. 귀하의 답변 주셔서 감사합니다! 당신의 코드는 나에게 너무 어렵다. $ ('input # file')에서 평가할 조건을 원한다. val() 충돌하는 문자가있다. – FranQ

+0

@FranQ 그게 내 코드와 정확히 일치합니다. 업데이트 된 버전을 확인하십시오. – lonesomeday

+0

네, 맞습니다. 코드가 훌륭합니다. 나는 노력하고 잘 작동합니다. 그러나 그것은 내가 필요로하는 것이 아닙니다. 나는 codeIgniter와 함께 작업하고 있으며 파일 이름은 업로드 클래스로 소독 (공백 등)됩니다. 플러그인을 사용하면 양식에 공백이있는 파일 이름을 업로드 할 수 없습니다. 클래스가 검사하지 않는 일부 문자 만 제어해야합니다. – FranQ

3

모두에서 모든 문자를 차단하지 고려해보십시오. 그것은 단지 사용자를위한 번거 로움이며 이상한 경로 문자가있는 이색 시스템에서 사용자가 전혀 업로드하지 못하게 될 수 있습니다.

사용자가 파일을 업로드하도록하고 URI 인코딩 형식으로 서버에 파일 이름을 저장하십시오 (PHP에서는 urlencode()이 올바른 기능이됩니다). 이렇게하면 파일 이름이 OS와 호환되며 파일을 다시 다운로드 할 때 특수 문자를 유지할 수 있습니다.

+0

+1 사용자가 아무 것도 할 수는 없지만 백 엔드를 살균하십시오. 항상가는 길 – RobertPitt

+0

좋은 조언. 나는 그것을 명심 할 것이다. 감사 – FranQ

관련 문제