2011-10-02 1 views
8

방법 = "게시물"에 enctype = "텍스트/일반"호환되지 않습니다? 내가 사용하는 경우

<form method="post" enctype="text/plain" action="proc.php"> 

폼 데이터가 제대로 파일을 proc.php을 보낼 수 없습니다. 왜? 문제가 무엇입니까? 왜 내가 게시물과 함께 텍스트/일반 인코딩을 사용할 수 없지만 get 메소드와 함께 사용할 수 있습니까? http://dev.w3.org/html5/spec/association-of-controls-and-forms.html#plain-text-form-data :

+6

난 당신이 파일 업로드를하고있는 경우가 아니면, PHP 버전을 정의 할 필요가 없습니다 확신, 그것은해야한다 : 에 enctype = "multipart/form-data"로 [링크] (HTTP ://www.w3.org/TR/html4/interact/forms.html#adef-enctype) – rwyland

+1

w3schools ([link] (http://www.w3schools.com/tags/att_form_enctype.asp))에 따르면 'application/x-www-form-urlencoded'가 기본값입니다. –

+0

제 질문은 왜 method = "post"이고 enctype = "text/plain"이 함께 작동하지 않는 것입니까? 내 HTML 코드가 더 이상 중요하지 않고 사용해야하는 것은 중요하지 않습니다 !!!!!!!!!!!!!!!!!!! – Narek

답변

21

[개정]

PHP는 그것을 처리하지 않습니다 (그리고 버그가 아닙니다) 때문에 대답입니다 :

https://bugs.php.net/bug.php?id=33741

Valid values for enctype in <form> tag are: 

application/x-www-form-urlencoded 
multipart/form-data 

첫 번째는 기본입니다 두 번째 파일은 파일을 업로드 할 때만 필요합니다. PHP는 $_POST 배열을 채울 수 있지만, 변수 $HTTP_RAW_POST_DATA 내부의 값을 저장하지 않는 이유를 설명을 제공

@Alohci.

text/plain에 enctype으로 잘못 될 수 있는지의 예 :

file1.php :

<form method="post" enctype="text/plain" action="file2.php"> 
<textarea name="input1">abc 
input2=def</textarea> 
<input name="input2" value="ghi" /> 
<input type="submit"> 
</form> 

file2.php :

<?php 
print($HTTP_RAW_POST_DATA); 
?> 

결과 :

input1=abc 
input2=def 
input2=ghi 

없음 distin에가는 길 input1input2 변수의 값이 무엇인지 guish. 그것은 될 수

  • 입력 1 = abc\r\ninput2=def, 입력 2 = ghi

    뿐만 아니라
  • 입력 1 = abc, 입력 2 = def\r\ninput2=ghi

앞서 언급 한 다른 두 인코딩을 사용하여 이러한 문제.

GET 및 POST 차이 :

GET에
  • 이 변수는 URL의 일부 쿼리 문자열 URL에 존재하고, 따라서 그들이 URL로 인코딩되어야한다 (그리고 그들이은 심지어 enctype="text/plain"으로 작성하면 브라우저에서 무시되므로 Wireshark를 사용하여 요청 패킷을 스니핑하여 테스트 할 수 있습니다.
  • POST를 보낼 때 변수는 URL의 일부가 아니지만 HTTP의 마지막 헤더로 전송됩니다 요청 (POSTDATA)을 보내고 text/plain 또는 application/x-www-form-urlencoded, bu로 보낼지 여부를 선택할 수 있습니다. 두 번째 것은 모호하지 않은 유일한 해결책입니다.
+3

[HTML5] (http://dev.w3.org/html5/spec/association-of-controls-and-forms.html#attr-fs-enctype)에 따르면'text/plain'은 세 번째 유효한 content- enctype을 입력하십시오. 형식은 http://dev.w3.org/html5/spec/association-of-controls-and-forms.html#plain-text-form-data에 설명되어 있습니다. – Alohci

+0

좋은 테이블은 [여기] (http://www.w3schools.com/tags/att_form_enctype.asp)입니다. (이미 게시했습니다) –

+5

솔직히 말해서, 나는 w3schools가 말하는 단어를 결코 믿지 않습니다. – Alohci

10

HTML5는 여기 text/plain로 제출 된 양식 데이터를 포맷하는 방법을 정의 않습니다. 해당 섹션의 맨 아래에서

, 그것은 말한다 : 텍스트/일반 형식을 사용하여

페이로드가 사람이 읽을 수하기위한 것입니다. 형식 모호로서 그들이 컴퓨터에 의해 안정적으로 해석하지 않은 (예를 들어, 값의 끝에서 새로운 라인의 값에 개행 문자를 구별 할 방법이 없다).

따라서 PHP가 해석하지 않고 원시 형식으로 만 사용할 수 있도록하는 것은 무리가 아닙니다. 나에게 그것은 올바른 접근법 인 것 같다.

관련 문제