Chris@0: getEncoding()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns the portion of string specified by the start and length parameters Chris@0: * Chris@0: * @param string $str Chris@0: * @param int $offset Chris@0: * @param int|null $length Chris@0: * @return string|false Chris@0: */ Chris@0: public function substr($str, $offset = 0, $length = null) Chris@0: { Chris@0: return iconv_substr($str, $offset, $length, $this->getEncoding()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Find the position of the first occurrence of a substring in a string Chris@0: * Chris@0: * @param string $haystack Chris@0: * @param string $needle Chris@0: * @param int $offset Chris@0: * @return int|false Chris@0: */ Chris@0: public function strpos($haystack, $needle, $offset = 0) Chris@0: { Chris@0: return iconv_strpos($haystack, $needle, $offset, $this->getEncoding()); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Convert a string from defined encoding to the defined convert encoding Chris@0: * Chris@0: * @param string $str Chris@0: * @param bool $reverse Chris@0: * @return string|false Chris@0: */ Chris@0: public function convert($str, $reverse = false) Chris@0: { Chris@0: $encoding = $this->getEncoding(); Chris@0: $convertEncoding = $this->getConvertEncoding(); Chris@0: if ($convertEncoding === null) { Chris@0: throw new Exception\LogicException( Chris@0: 'No convert encoding defined' Chris@0: ); Chris@0: } Chris@0: Chris@0: if ($encoding === $convertEncoding) { Chris@0: return $str; Chris@0: } Chris@0: Chris@0: $fromEncoding = $reverse ? $convertEncoding : $encoding; Chris@0: $toEncoding = $reverse ? $encoding : $convertEncoding; Chris@0: Chris@0: // automatically add "//IGNORE" to not stop converting on invalid characters Chris@0: // invalid characters triggers a notice anyway Chris@0: return iconv($fromEncoding, $toEncoding . '//IGNORE', $str); Chris@0: } Chris@0: }