Created
August 21, 2011 06:57
-
-
Save 2no/1160265 to your computer and use it in GitHub Desktop.
自動的に文字列を UTF-8 に変換し、NULL バイト文字を削除する
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class Variables extends ArrayObject | |
{ | |
/** | |
* 取得候補の文字コード | |
* | |
* @var string | |
*/ | |
const DETECT_ORDER_ENCODING = 'UTF-8, SJIS-win, eucJP-win'; | |
/** | |
* エラーが発生しているか | |
* | |
* @var boolean | |
*/ | |
private $_hasError; | |
/** | |
* 変換後の文字コード | |
* | |
* @var string | |
*/ | |
private $_encoding; | |
/** | |
* コンストラクタ | |
* | |
* 存在しないリクエストメソッドが指定された場合、自動的に GET が指定されます。 | |
* | |
* @param mixed $value 格納した値 | |
* @param string $encoding 文字列があった場合に適用する文字コード | |
* @return void | |
*/ | |
public function __construct($value = null, $encoding = 'UTF-8') | |
{ | |
$this->_hasError = false; | |
$this->_encoding = ''; | |
$this->setEncoding($encoding); | |
parent::__construct($this->_mends($value)); | |
} | |
/** | |
* 値を追加します。 | |
* | |
* @param mixed $value 追加する値 | |
* @return void | |
*/ | |
public function append($value) | |
{ | |
parent::append($this->_mends($value)); | |
} | |
/** | |
* 指定したインデックスに新しい値をセットします。 | |
* | |
* @param int $index 設定したいインデックス | |
* @param mixed $newval index の新しい値 | |
* @return void | |
*/ | |
public function offsetSet($index, $newval) | |
{ | |
parent::offsetSet($index, $this->_mends($newval)); | |
} | |
/** | |
* エラーが発生しているか | |
* | |
* @return boolean | |
*/ | |
public function hasError() | |
{ | |
return $this->_hasError; | |
} | |
/** | |
* 変換後の文字コード | |
* | |
* @return string | |
*/ | |
public function getEncoding() | |
{ | |
return $this->_encoding; | |
} | |
/** | |
* 変換後の文字コードを設定します。 | |
* | |
* @param $encoding 設定した文字コード | |
* @return void | |
*/ | |
public function setEncoding($encoding) | |
{ | |
if (0 < strlen($encoding)) { | |
$this->_encoding = $encoding; | |
} | |
} | |
/** | |
* 値を直します。 | |
* | |
* @param mixed $value 直す対象の値 | |
* @return mixed 直した後の値 | |
*/ | |
private function _mends($value) | |
{ | |
if (is_string($value)) { | |
$value = str_replace("\0", '', $value); | |
$toEncode = $this->_encoding; | |
$fromEncode = mb_detect_encoding($value, | |
self::DETECT_ORDER_ENCODING, true); | |
if (!$fromEncode) { | |
$this->_hasError = true; | |
} | |
else { | |
$value = mb_convert_encoding($value, $toEncode, $fromEncode); | |
} | |
} | |
else if (is_array($value)) { | |
$value = array_map(array($this, '_mends'), $value); | |
} | |
return $value; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment