[Yaml] fixed YAML parser when mbstring.func_overload is used with an mbstring.internal_encoding different from ASCII

This commit is contained in:
Fabien Potencier 2010-03-29 12:40:22 +02:00
parent 4bd865de67
commit dc1bc88279
2 changed files with 34 additions and 3 deletions

View File

@ -37,15 +37,30 @@ class Inline
return '';
}
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2)
{
$mbEncoding = mb_internal_encoding();
mb_internal_encoding('ASCII');
}
switch ($value[0])
{
case '[':
return self::parseSequence($value);
$result = self::parseSequence($value);
break;
case '{':
return self::parseMapping($value);
$result = self::parseMapping($value);
break;
default:
return self::parseScalar($value);
$result = self::parseScalar($value);
}
if (isset($mbEncoding))
{
mb_internal_encoding($mbEncoding);
}
return $result;
}
/**

View File

@ -50,6 +50,12 @@ class Parser
$this->currentLine = '';
$this->lines = explode("\n", $this->cleanup($value));
if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2)
{
$mbEncoding = mb_internal_encoding();
mb_internal_encoding('ASCII');
}
$data = array();
while ($this->moveToNextLine())
{
@ -220,6 +226,11 @@ class Parser
}
}
if (isset($mbEncoding))
{
mb_internal_encoding($mbEncoding);
}
return $value;
}
@ -253,6 +264,11 @@ class Parser
}
}
if (isset($mbEncoding))
{
mb_internal_encoding($mbEncoding);
}
return empty($data) ? null : $data;
}