diff --git a/framework/helpers/BaseArrayHelper.php b/framework/helpers/BaseArrayHelper.php index b866679..c79b441 100644 --- a/framework/helpers/BaseArrayHelper.php +++ b/framework/helpers/BaseArrayHelper.php @@ -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 { diff --git a/tests/framework/helpers/ArrayHelperTest.php b/tests/framework/helpers/ArrayHelperTest.php index ed2de00..fcc3452 100644 --- a/tests/framework/helpers/ArrayHelperTest.php +++ b/tests/framework/helpers/ArrayHelperTest.php @@ -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<>b', '23' => true, - ] + ], + 'invalid' => 'a�b', ], ArrayHelper::htmlEncode($array)); $this->assertEquals([ 'abc' => '123', @@ -463,7 +465,8 @@ class ArrayHelperTest extends TestCase [ '<>' => 'a<>b', '23' => true, - ] + ], + 'invalid' => 'a�b', ], ArrayHelper::htmlEncode($array, false)); }