Browse Source

Merge pull request #10592 from andrewnester/10574-compatible-fix

#10574 - (2.0.x compatible)  Fix for BaseArrayHelper::encode to work with invalid characters in proper way
tags/2.0.7
Dmitry Naumenko 9 years ago
parent
commit
e58c1c1b42
  1. 6
      framework/helpers/BaseArrayHelper.php
  2. 9
      tests/framework/helpers/ArrayHelperTest.php

6
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 {

9
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&lt;&gt;b',
'23' => true,
]
],
'invalid' => 'a<EFBFBD>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<EFBFBD>b',
], ArrayHelper::htmlEncode($array, false));
}

Loading…
Cancel
Save