#10574 - Fix for BaseArrayHelper to work with invalid characters in proper way

This commit is contained in:
Andrew Nester
2016-01-16 09:37:36 +03:00
parent 79ad12f1cc
commit ed23b97baf
2 changed files with 9 additions and 6 deletions

View File

@ -467,15 +467,15 @@ class BaseArrayHelper
public static function htmlEncode($data, $valuesOnly = true, $charset = null)
{
if ($charset === null) {
$charset = Yii::$app->charset;
$charset = Yii::$app ? Yii::$app->charset : 'UTF-8';
}
$d = [];
foreach ($data as $key => $value) {
if (!$valuesOnly && is_string($key)) {
$key = htmlspecialchars($key, ENT_QUOTES, $charset);
$key = htmlspecialchars($key, ENT_QUOTES | ENT_SUBSTITUTE, $charset);
}
if (is_string($value)) {
$d[$key] = htmlspecialchars($value, ENT_QUOTES, $charset);
$d[$key] = htmlspecialchars($value, ENT_QUOTES | ENT_SUBSTITUTE, $charset);
} elseif (is_array($value)) {
$d[$key] = static::htmlEncode($value, $valuesOnly, $charset);
} else {

View File

@ -443,7 +443,8 @@ class ArrayHelperTest extends TestCase
[
'<>' => 'a<>b',
'23' => true,
]
],
'invalid' => "a\x80b",
];
$this->assertEquals([
'abc' => '123',
@ -453,7 +454,8 @@ class ArrayHelperTest extends TestCase
[
'<>' => 'a&lt;&gt;b',
'23' => true,
]
],
'invalid' => 'a<>b',
], ArrayHelper::htmlEncode($array));
$this->assertEquals([
'abc' => '123',
@ -463,7 +465,8 @@ class ArrayHelperTest extends TestCase
[
'&lt;&gt;' => 'a&lt;&gt;b',
'23' => true,
]
],
'invalid' => 'a<>b',
], ArrayHelper::htmlEncode($array, false));
}