Suhosin 패치를 계속 사용하고 UTF-8 양식 제출과 함께 사용할 수있는 솔루션을 찾으려면 고심하고 있습니다.PHP 5.3, Suhosin 및 UTF-8
<?php var_dump($_POST); ?>
<form method="post">
<input name="test" type="text"/>
<input type="submit" />
</form>
iñtërnâtiônàlizætiøn 문자열 를 사용 : 이것은 내가 만든 아주 간단한 테스트입니다. 필자는 분명히 서버에서 utf-8 헤더를 활성화하고 php default_charset을 utf-8로 설정하고 mb * override를 활성화했습니다. Suhosin 패치를 비활성화하고 양식을 다시 제출하면 모든 것이 제대로 작동합니다.
$test = $_POST['test'];
var_dump(mb_detect_encoding($test, "UTF-8", true));
// Returns true if $string is valid UTF-8 and false otherwise.
function is_utf8($string) {
// From http://w3.org/International/questions/qa-forms-utf-8.html
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $string);
} // function is_utf8
var_dump(is_utf8($test));
을 시험 모두 그렇지 않으면 활성화는 true 수호신 패치를 false 반환
UPDATE
난 그냥 확인하기 위해 더 많은 테스트를했다. 문제는 버그입니까 아니면 예상되는 행동입니까? Suhosin 패치에 대한 구성 매개 변수가 멀티 바이트 문자열에 관한 어떤 마법을 수행합니까?
멋진 마음으로 올바른 조언을하지 않는 한이 시점에서 볼 수있는 유일한 옵션은 패치를 비활성화하는 것입니다.
업데이트 2
는 GET 문자열을 손상하지 않고 제대로 브라우저에 표시됩니다. POST 만 현재 수행합니다.
오류가 발생합니다. 또한 오류 로그를 확인하십시오. 또한 mb_ 함수 재정의를 사용하지 말 것을 강력히 권장합니다. 그들은 기존 코드의 * 많은 *을 망칠 것입니다. 필요할 때 mb_ 함수를 항상 명시 적으로 사용하는 것이 더 좋습니다. – Evert
오류가 표시되지 않습니다. 문자열이 잘못 정확하게 디코딩됩니다. – zekus
어떻게 잘못 디코딩됩니까? 당신은 당신의 질문에서 이것을 언급하지 않았습니다. 실제 문제에 대한 세부 사항을 추가하지 말고 – Evert