# HTTP Input and Output

HTTP input/output character encoding conversion may convert binary data also. Users are supposed to control character encoding conversion if binary data is used for HTTP input/output.

In PHP 4.3.2 or earlier versions, there was a limitation in this functionality that `mbstring` does not perform character encoding conversion in POST data if the `enctype` attribute in the `form` element is set to `multipart/form-data`. So you have to convert the incoming data by yourself in this case if necessary.

Beginning with PHP 4.3.3, if `enctype` for HTML form is set to `multipart/form-data` and `mbstring.encoding_translation` is set to On in &php.ini; the POST'ed variables and the names of uploaded files will be converted to the internal character encoding as well. However, the conversion isn't applied to the query keys.

- HTTP Input

  There is no way to control HTTP input character conversion from a PHP script. To disable HTTP input character conversion, it has to be done in &php.ini;.

  ## Disable HTTP input conversion in &php.ini;

      ;; Disable HTTP Input conversion
      mbstring.http_input = pass
      ;; Disable HTTP Input conversion (PHP 4.3.0 or higher)
      mbstring.encoding_translation = Off

  When using PHP as an Apache module, it is possible to override those settings in each Virtual Host directive in &httpd.conf; or per directory with &htaccess;. Refer to the Configuration section and Apache Manual for details.

- HTTP Output

  There are several ways to enable output character encoding conversion. One is using &php.ini;, another is using `ob_start` with `mb_output_handler` as the `ob_start` callback function.

## &php.ini; setting example

    ;; Enable output character encoding conversion for all PHP pages

    ;; Enable Output Buffering
    output_buffering    = On

    ;; Set mb_output_handler to enable output conversion
    output_handler      = mb_output_handler

## Script example

    <?php

    // Enable output character encoding conversion only for this page

    // Set HTTP output character encoding to SJIS
    mb_http_output('SJIS');

    // Start buffering and specify "mb_output_handler" as
    // callback function
    ob_start('mb_output_handler');

    ?>