from = 'CP1252'; // default to encoding $this->to = 'UTF-8'; } /** * Sets the charset that we will be converting to. * * @param string $charset * @chainable */ public function to($charset) { $this->to = strtoupper($charset); return $this; } /** * Sets the charset that we will be converting from. * * @param string $charset * @chainable */ public function from($charset) { $this->from = strtoupper($charset); } /** * Returns the to and from charset that we will be using. * * @return array */ public function charset() { return [ 'from' => $this->from, 'to' => $this->to, ]; } /** * Attempts to detect the encoding of the given string from the encodingList. * * @param string $str * @param array $encodingList * @return bool */ public function detect($str, $encodingList = ['UTF-8', 'CP1252']) { $charset = mb_detect_encoding($str, $encodingList); if ($charset === false) { // could not detect charset return false; } $this->from = $charset; return true; } /** * Attempts to convert the string to the proper charset. * * @return string */ public function convert($str) { if ($this->from != $this->to) { $str = iconv($this->from, $this->to, $str); } if ($str === false) { // the convertion was a failure throw new Exception('The convertion from "'.$this->from.'" to "'.$this->to.'" was a failure.'); } // deal with BOM issue for utf-8 text if ($this->to == 'UTF-8') { if (substr($str, 0, 3) == "\xef\xbb\xbf") { $str = substr($str, 3); } if (substr($str, -3, 3) == "\xef\xbb\xbf") { $str = substr($str, 0, -3); } } return $str; } }