mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-03 22:32:40 +08:00
Fixes #16648: Html::strtolower() was corrupting UTF-8 strings
This commit is contained in:
committed by
Alexander Makarov
parent
383953d9b7
commit
06227c7075
@ -4,6 +4,7 @@ Yii Framework 2 Change Log
|
|||||||
2.0.16 under development
|
2.0.16 under development
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
- Bug #16648: Html::strtolower() was corrupting UTF-8 strings (Kolyunya)
|
||||||
- Bug #13977: Skip validation if file input does not exist (RobinKamps, s1lver)
|
- Bug #13977: Skip validation if file input does not exist (RobinKamps, s1lver)
|
||||||
- Bug #16183: Fixed when `yii\helpers\BaseFileHelper` sometimes returned wrong value (samdark, SilverFire, OndrejVasicek)
|
- Bug #16183: Fixed when `yii\helpers\BaseFileHelper` sometimes returned wrong value (samdark, SilverFire, OndrejVasicek)
|
||||||
- Bug #13932: Fix number validator attributes comparison (uaoleg, s1lver)
|
- Bug #13932: Fix number validator attributes comparison (uaoleg, s1lver)
|
||||||
|
|||||||
@ -2295,7 +2295,8 @@ class BaseHtml
|
|||||||
*/
|
*/
|
||||||
public static function getInputId($model, $attribute)
|
public static function getInputId($model, $attribute)
|
||||||
{
|
{
|
||||||
$name = strtolower(static::getInputName($model, $attribute));
|
$charset = Yii::$app ? Yii::$app->charset : 'UTF-8';
|
||||||
|
$name = mb_strtolower(static::getInputName($model, $attribute), $charset);
|
||||||
return str_replace(['[]', '][', '[', ']', ' ', '.'], ['', '-', '-', '', '-', '-'], $name);
|
return str_replace(['[]', '][', '[', ']', ' ', '.'], ['', '-', '-', '', '-', '-'], $name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1778,6 +1778,19 @@ EOD;
|
|||||||
$this->assertSame($expected, $actual);
|
$this->assertSame($expected, $actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider testGetInputIdDataProvider
|
||||||
|
*/
|
||||||
|
public function testGetInputId($attributeName, $inputIdExpected)
|
||||||
|
{
|
||||||
|
$model = new DynamicModel();
|
||||||
|
$model->defineAttribute($attributeName);
|
||||||
|
|
||||||
|
$inputIdActual = Html::getInputId($model, $attributeName);
|
||||||
|
|
||||||
|
$this->assertSame($inputIdExpected, $inputIdActual);
|
||||||
|
}
|
||||||
|
|
||||||
public function testEscapeJsRegularExpression()
|
public function testEscapeJsRegularExpression()
|
||||||
{
|
{
|
||||||
$expected = '/[a-z0-9-]+/';
|
$expected = '/[a-z0-9-]+/';
|
||||||
@ -1858,6 +1871,45 @@ HTML;
|
|||||||
|
|
||||||
$this->assertContains('placeholder="My placeholder: Name"', $html);
|
$this->assertContains('placeholder="My placeholder: Name"', $html);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetInputIdDataProvider()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
'foo',
|
||||||
|
'dynamicmodel-foo',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'FooBar',
|
||||||
|
'dynamicmodel-foobar',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'Foo_Bar',
|
||||||
|
'dynamicmodel-foo_bar',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'foo[]',
|
||||||
|
'dynamicmodel-foo',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'foo[bar][baz]',
|
||||||
|
'dynamicmodel-foo-bar-baz',
|
||||||
|
],
|
||||||
|
|
||||||
|
[
|
||||||
|
'foo.bar',
|
||||||
|
'dynamicmodel-foo-bar',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'bild_groß_dateiname',
|
||||||
|
'dynamicmodel-bild_groß_dateiname',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'ФуБарБаз',
|
||||||
|
'dynamicmodel-фубарбаз',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user