PHP의 GET 및 POST 요청에서 문자 세트가 다른 문제가 있습니다. 상황은 다음과 같습니다.PHP : POST 및 GET의 문자 집합이 다릅니다
노르웨이어 문자열이 있습니다. 이 문자열에는 노르웨이어 문자가 포함될 수 있습니다 (예 : "Ensjøsvingen"). 이 문자열을 GET 매개 변수를 통해 전달한 다음 가져오고 계산하게하면 strlen이 13 [올바른 값]이라고보고합니다. 내가의 printf를 사용하여 16 진수하는 문자열을 변환 할 때 내가 POST-있었던 파라미터를 통해이 문자열을 전달하면, 그것을 가져 그것은 계산하자, 그것은 17
의 나 strlen를보고,이 나오는 것입니다 :
GET : 45 6e 73 6a c3 b8 73 76 69 6e 67 65 6e
POST : 45 6e 73 6a 26 23 32 34 38 3b 73 76 69 6e 67 65 6e
물론, POST가 더 길다. 내 생각은 그것이 charset 이었기 때문에 PHP는 문자열에 어떤 문자셋이 있는지 알려주고 PHP는 GET-String이 UTF-8이고 POST-String이 ASCII (UTF-8의 하위 집합 임)). iconv를 사용하여 ASCII를 UTF-8로 변환하면 strlen에서 아무 것도 변경되지 않습니다.
문제는 그 문자열을 사용하여 나중의 사용을 위해 SHA1 해시를 생성한다는 것입니다 (콜리 전을 피해야하는 곳에서는 아무 것도 중요하지 않으므로 SHA1은 완전히 괜찮습니다). 그래서 mb _ * - 함수를 사용하여 정확한 결과를 얻을 수 없습니다 문자열이 전달 된 것과 관계없이 동일한 해시.
어떻게이 문제를 해결할 수 있습니까?
양식에 문자 세트를 지정 하시겠습니까? 즉'
@FuzzyTree 네, 그렇게했습니다. 불행히도, 이것은 아무 것도 바뀌지 않습니다. –
약간의 해결 방법이지만 html_entity_decode는 다양한 형식의 여러 특수 문자를 처리하여 적절한 HTML 엔터티로 변경합니다. 해당 함수를 통해 두 문자열을 모두 보내면 동일한 결과가 나타 납니까? 그것은 & oslash를 사용하여 둘 다 변환해야합니다; – kainaw