[php][mobilephone]続: au携帯のSSLで文字化け

http://d.hatena.ne.jp/lapis25/20081016/1224131261の続き

ちょっと実験してみた.phpはoutput_bufferingをOffにしている

au-ssl-sjis.php

これで化ける

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=Shift_JIS" />
<title>au-ssl-test</title>
</head>
<body>
<?php print("A") ?>
</body>
<html>

au-ssl-utf8.php

utfでも化ける

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>au-ssl-test</title>
</head>
<body>
<?php print("A") ?>
</body>
<html>

au-ssl.cgi

perlでもやってみる.$| = 1でバッファリングを無効にして,sleepを1文字出力の前後に挟んで出力すると化ける

#!/usr/bin/perl

use strict;
use warnings;

use CGI;
my $q = CGI->new;

$| = 1;

print $q->header,
      $q->start_html;
sleep(5);
print "A";
sleep(5);
print $q->end_html;

化けた文字の内容

実機で見ても化けた文字は表示されない.OpenWaveSDKで表示させてソースを見てみるとTを上下逆さまにしたような文字で表示される.文字コードを調べてみると,0x15であり,ascii codeではNAK(否定応答)に該当する.プロキシがわざわざこのコードを返している可能性もありますね

そもそもの対策

対策は必要ないと思います.perlは特に何かしない限り標準出力はバッファリングされている.phpでの問題は文字化けしたプログラムの問題です(Smartyでfetchで取得して文字コード変換してから出力すればいいものを、displayを使って出力している)

同じことが起こったときには,役に立つかもしれません