mb_detect_order = $mb_detect_order; } if ($message_limit != null) { $this->message_limit = (int) $message_limit; } } /** * Serialize an object (recursively) into something safe for data * sanitization and encoding. * * @param mixed $value * @param int $max_depth * @param int $_depth * @return string|bool|double|int|null|object|array */ public function serialize($value, $max_depth = 3, $_depth = 0) { $className = is_object($value) ? get_class($value) : null; $toArray = is_array($value) || $className === 'stdClass'; if ($toArray && $_depth < $max_depth) { $new = array(); foreach ($value as $k => $v) { $new[$this->serializeValue($k)] = $this->serialize($v, $max_depth, $_depth + 1); } return $new; } return $this->serializeValue($value); } protected function serializeString($value) { $value = (string) $value; if (function_exists('mb_detect_encoding') && function_exists('mb_convert_encoding') ) { // we always guarantee this is coerced, even if we can't detect encoding if ($currentEncoding = mb_detect_encoding($value, $this->mb_detect_order)) { $value = mb_convert_encoding($value, 'UTF-8', $currentEncoding); } else { $value = mb_convert_encoding($value, 'UTF-8'); } } if (strlen($value) > $this->message_limit) { $value = substr($value, 0, $this->message_limit - 10) . ' {clipped}'; } return $value; } /** * @param mixed $value * @return string|bool|double|int|null */ protected function serializeValue($value) { if (is_null($value) || is_bool($value) || is_float($value) || is_integer($value)) { return $value; } elseif (is_object($value) || gettype($value) == 'object') { return 'Object '.get_class($value); } elseif (is_resource($value)) { return 'Resource '.get_resource_type($value); } elseif (is_array($value)) { return 'Array of length ' . count($value); } else { return $this->serializeString($value); } } /** * @return string * @codeCoverageIgnore */ public function getMbDetectOrder() { return $this->mb_detect_order; } /** * @param string $mb_detect_order * * @return Raven_Serializer * @codeCoverageIgnore */ public function setMbDetectOrder($mb_detect_order) { $this->mb_detect_order = $mb_detect_order; return $this; } /** * @return int * @codeCoverageIgnore */ public function getMessageLimit() { return $this->message_limit; } /** * @param int $message_limit * @codeCoverageIgnore */ public function setMessageLimit($message_limit) { $this->message_limit = (int)$message_limit; } }