[Form] moved data trimming logic of TrimListener into StringUtil
This commit is contained in:
parent
351174be88
commit
f42c77710b
@ -8,6 +8,7 @@ CHANGELOG
|
|||||||
* added the html5 "range" FormType
|
* added the html5 "range" FormType
|
||||||
* deprecated the "cascade_validation" option in favor of setting "constraints"
|
* deprecated the "cascade_validation" option in favor of setting "constraints"
|
||||||
with the Valid constraint
|
with the Valid constraint
|
||||||
|
* moved data trimming logic of TrimListener into StringUtil
|
||||||
|
|
||||||
2.7.0
|
2.7.0
|
||||||
-----
|
-----
|
||||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\EventListener;
|
|||||||
use Symfony\Component\Form\FormEvents;
|
use Symfony\Component\Form\FormEvents;
|
||||||
use Symfony\Component\Form\FormEvent;
|
use Symfony\Component\Form\FormEvent;
|
||||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
use Symfony\Component\Form\Util\StringUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trims string data.
|
* Trims string data.
|
||||||
@ -30,11 +31,7 @@ class TrimListener implements EventSubscriberInterface
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null !== $result = @preg_replace('/^[\pZ\p{Cc}]+|[\pZ\p{Cc}]+$/u', '', $data)) {
|
$event->setData(StringUtil::trim($data));
|
||||||
$event->setData($result);
|
|
||||||
} else {
|
|
||||||
$event->setData(trim($data));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,67 +39,4 @@ class TrimListenerTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$this->assertSame(1234, $event->getData());
|
$this->assertSame(1234, $event->getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @dataProvider spaceProvider
|
|
||||||
*/
|
|
||||||
public function testTrimUtf8Separators($hex)
|
|
||||||
{
|
|
||||||
if (!function_exists('mb_convert_encoding')) {
|
|
||||||
$this->markTestSkipped('The "mb_convert_encoding" function is not available');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert hexadecimal representation into binary
|
|
||||||
// H: hex string, high nibble first (UCS-2BE)
|
|
||||||
// *: repeat until end of string
|
|
||||||
$binary = pack('H*', $hex);
|
|
||||||
|
|
||||||
// Convert UCS-2BE to UTF-8
|
|
||||||
$symbol = mb_convert_encoding($binary, 'UTF-8', 'UCS-2BE');
|
|
||||||
$symbol = $symbol."ab\ncd".$symbol;
|
|
||||||
|
|
||||||
$form = $this->getMock('Symfony\Component\Form\Test\FormInterface');
|
|
||||||
$event = new FormEvent($form, $symbol);
|
|
||||||
|
|
||||||
$filter = new TrimListener();
|
|
||||||
$filter->preSubmit($event);
|
|
||||||
|
|
||||||
$this->assertSame("ab\ncd", $event->getData());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function spaceProvider()
|
|
||||||
{
|
|
||||||
return array(
|
|
||||||
// separators
|
|
||||||
array('0020'),
|
|
||||||
array('00A0'),
|
|
||||||
array('1680'),
|
|
||||||
// array('180E'),
|
|
||||||
array('2000'),
|
|
||||||
array('2001'),
|
|
||||||
array('2002'),
|
|
||||||
array('2003'),
|
|
||||||
array('2004'),
|
|
||||||
array('2005'),
|
|
||||||
array('2006'),
|
|
||||||
array('2007'),
|
|
||||||
array('2008'),
|
|
||||||
array('2009'),
|
|
||||||
array('200A'),
|
|
||||||
array('2028'),
|
|
||||||
array('2029'),
|
|
||||||
array('202F'),
|
|
||||||
array('205F'),
|
|
||||||
array('3000'),
|
|
||||||
// controls
|
|
||||||
array('0009'),
|
|
||||||
array('000A'),
|
|
||||||
array('000B'),
|
|
||||||
array('000C'),
|
|
||||||
array('000D'),
|
|
||||||
array('0085'),
|
|
||||||
// zero width space
|
|
||||||
// array('200B'),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
72
src/Symfony/Component/Form/Tests/Util/StringUtilTest.php
Normal file
72
src/Symfony/Component/Form/Tests/Util/StringUtilTest.php
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symfony\Component\Form\Tests\Util;
|
||||||
|
|
||||||
|
use Symfony\Component\Form\Util\StringUtil;
|
||||||
|
|
||||||
|
class StringUtilTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testTrim()
|
||||||
|
{
|
||||||
|
$data = ' Foo! ';
|
||||||
|
|
||||||
|
$this->assertEquals('Foo!', StringUtil::trim($data));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider spaceProvider
|
||||||
|
*/
|
||||||
|
public function testTrimUtf8Separators($hex)
|
||||||
|
{
|
||||||
|
if (!function_exists('mb_convert_encoding')) {
|
||||||
|
$this->markTestSkipped('The "mb_convert_encoding" function is not available');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert hexadecimal representation into binary
|
||||||
|
// H: hex string, high nibble first (UCS-2BE)
|
||||||
|
// *: repeat until end of string
|
||||||
|
$binary = pack('H*', $hex);
|
||||||
|
|
||||||
|
// Convert UCS-2BE to UTF-8
|
||||||
|
$symbol = mb_convert_encoding($binary, 'UTF-8', 'UCS-2BE');
|
||||||
|
$symbol = $symbol."ab\ncd".$symbol;
|
||||||
|
|
||||||
|
$this->assertSame("ab\ncd", StringUtil::trim($symbol));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function spaceProvider()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
// separators
|
||||||
|
array('0020'),
|
||||||
|
array('00A0'),
|
||||||
|
array('1680'),
|
||||||
|
// array('180E'),
|
||||||
|
array('2000'),
|
||||||
|
array('2001'),
|
||||||
|
array('2002'),
|
||||||
|
array('2003'),
|
||||||
|
array('2004'),
|
||||||
|
array('2005'),
|
||||||
|
array('2006'),
|
||||||
|
array('2007'),
|
||||||
|
array('2008'),
|
||||||
|
array('2009'),
|
||||||
|
array('200A'),
|
||||||
|
array('2028'),
|
||||||
|
array('2029'),
|
||||||
|
array('202F'),
|
||||||
|
array('205F'),
|
||||||
|
array('3000'),
|
||||||
|
// controls
|
||||||
|
array('0009'),
|
||||||
|
array('000A'),
|
||||||
|
array('000B'),
|
||||||
|
array('000C'),
|
||||||
|
array('000D'),
|
||||||
|
array('0085'),
|
||||||
|
// zero width space
|
||||||
|
// array('200B'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
42
src/Symfony/Component/Form/Util/StringUtil.php
Normal file
42
src/Symfony/Component/Form/Util/StringUtil.php
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\Form\Util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Issei Murasawa <issei.m7@gmail.com>
|
||||||
|
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||||
|
*/
|
||||||
|
class StringUtil
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* This class should not be instantiated.
|
||||||
|
*/
|
||||||
|
private function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the trimmed data.
|
||||||
|
*
|
||||||
|
* @param string $string
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function trim($string)
|
||||||
|
{
|
||||||
|
if (null !== $result = @preg_replace('/^[\pZ\p{Cc}]+|[\pZ\p{Cc}]+$/u', '', $string)) {
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
return trim($string);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user