mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-26 06:15:19 +08:00
Fix BaseArrayHelper::htmlDecode() (#19386)
* Fix BaseArrayHelper::htmlDecode() Add missed second argument on recursive calling. * Fix BaseArrayHelper::htmlDecode() `htmlspecialchars_decode()` flags must be same to `htmlspecialchars()` in `BaseArrayHelper::htmlEncode()` * Update ArrayHelperTest.php * Update ArrayHelperTest.php * Update ArrayHelperTest.php * Update CHANGELOG.md * test workflow fix
This commit is contained in:
@ -26,6 +26,7 @@ Yii Framework 2 Change Log
|
||||
- Bug #19237: Fix OCI PHP 8.1 passing `null` to trim() (longthanhtran)
|
||||
- Bug #19312: Fix PHP 8.1 error when passing null to `yii\helpers\BaseInflector` (WinterSilence)
|
||||
- Bug #19368: Fix PHP 8.1 error when `$fileMimeType` is `null` in `yii\validators\FileValidator::validateMimeType()` (bizley)
|
||||
- Bug #19386: Fix recursive calling `yii\helpers\BaseArrayHelper::htmlDecode()` (WinterSilence)
|
||||
|
||||
|
||||
2.0.45 February 11, 2022
|
||||
|
@ -726,12 +726,14 @@ class BaseArrayHelper
|
||||
|
||||
/**
|
||||
* Decodes HTML entities into the corresponding characters in an array of strings.
|
||||
*
|
||||
* Only array values will be decoded by default.
|
||||
* If a value is an array, this method will also decode it recursively.
|
||||
* Only string values will be decoded.
|
||||
*
|
||||
* @param array $data data to be decoded
|
||||
* @param bool $valuesOnly whether to decode array values only. If false,
|
||||
* both the array keys and array values will be decoded.
|
||||
* @param bool $valuesOnly whether to decode array values only. If `false`,
|
||||
* then both the array keys and array values will be decoded.
|
||||
* @return array the decoded data
|
||||
* @see https://www.php.net/manual/en/function.htmlspecialchars-decode.php
|
||||
*/
|
||||
@ -740,12 +742,12 @@ class BaseArrayHelper
|
||||
$d = [];
|
||||
foreach ($data as $key => $value) {
|
||||
if (!$valuesOnly && is_string($key)) {
|
||||
$key = htmlspecialchars_decode($key, ENT_QUOTES);
|
||||
$key = htmlspecialchars_decode($key, ENT_QUOTES | ENT_SUBSTITUTE);
|
||||
}
|
||||
if (is_string($value)) {
|
||||
$d[$key] = htmlspecialchars_decode($value, ENT_QUOTES);
|
||||
$d[$key] = htmlspecialchars_decode($value, ENT_QUOTES | ENT_SUBSTITUTE);
|
||||
} elseif (is_array($value)) {
|
||||
$d[$key] = static::htmlDecode($value);
|
||||
$d[$key] = static::htmlDecode($value, $valuesOnly);
|
||||
} else {
|
||||
$d[$key] = $value;
|
||||
}
|
||||
|
@ -1185,29 +1185,35 @@ class ArrayHelperTest extends TestCase
|
||||
3 => 'blank',
|
||||
[
|
||||
'<>' => 'a<>b',
|
||||
'<a>' => '<a href="index.php?a=1&b=2">link</a>',
|
||||
'23' => true,
|
||||
],
|
||||
];
|
||||
$this->assertEquals([
|
||||
|
||||
$expected = [
|
||||
'abc' => '123',
|
||||
'<' => '>',
|
||||
'cde' => false,
|
||||
3 => 'blank',
|
||||
[
|
||||
'<>' => 'a<>b',
|
||||
'<a>' => '<a href="index.php?a=1&b=2">link</a>',
|
||||
'23' => true,
|
||||
],
|
||||
], ArrayHelper::htmlDecode($array));
|
||||
$this->assertEquals([
|
||||
];
|
||||
$this->assertEquals($expected, ArrayHelper::htmlDecode($array));
|
||||
$expected = [
|
||||
'abc' => '123',
|
||||
'<' => '>',
|
||||
'cde' => false,
|
||||
3 => 'blank',
|
||||
[
|
||||
'<>' => 'a<>b',
|
||||
'<a>' => '<a href="index.php?a=1&b=2">link</a>',
|
||||
'23' => true,
|
||||
],
|
||||
], ArrayHelper::htmlDecode($array, false));
|
||||
];
|
||||
$this->assertEquals($expected, ArrayHelper::htmlDecode($array, false));
|
||||
}
|
||||
|
||||
public function testIsIn()
|
||||
|
Reference in New Issue
Block a user