This Project Has Not Released Any Files
PHP のバージョンや PECL のインストール状況によって、Zend_Json の encode メソッドの動作が変わることが原因です。
このメソッドに UTF-8 文字列を渡した場合、json_encode 関数が使える場合は文字列が Unicode エスケープされますが、json_encode 関数が使えない場合は UTF-8 のままとなります。
IE では Unicode エスケープされない文字列を JSON で受け取った場合、「'}' がありません」といったエラーになります。
PHP 5.2.0 以上または、PECL json:1.2.0-1.2.1 をインストールした環境だと正常に動作します。
PHP 5.1.6 の環境では PECL を使って json をインストールするとこの問題は解消されます。
参考までに、CentOS release 5 での対応手順
# yum install php-devel # pecl channel-update pear.php.net # pecl install json # vi /etc/php.d/json.ini ; Enable json extension module extension=json.so # /etc/init.d/httpd restart
マルチバイト文字列の途中で改行されてしまうのが原因のようなので、Zend_Mail を継承して改修した Necosuke_Mail クラスを作成。使い方は同じ。
- <?php
- class Necosuke_Mail extends Zend_Mail {
- protected function _encodeHeader($value)
- {
- return sprintf(
- "=?%s?B?%s?=",
- $this->getCharset(),
- base64_encode(mb_convert_encoding($value, $this->getCharset()))
- );
- }
- public function __construct($charset='ISO-2022-JP') {
- parent::__construct($charset);
- }
- public function setBodyText($txt, $charset=null, $encoding=Zend_Mime::ENCODING_7BIT) {
- if(!$charset) {
- $charset = $this->getCharset();
- }
- parent::setBodyText(
- mb_convert_encoding($txt, $charset),
- $charset,
- $encoding
- );
- }
- }
次のマイナーバージョンアップで Zend_Upload とかいうのを用意するらしいが、待ちきれない。
[PageInfo]
LastUpdate: 2008-06-17 10:57:35, ModifiedBy: junkikuchi
[Permissions]
view:all, edit:members, delete/config:members