[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
|
||||
* deprecated the "cascade_validation" option in favor of setting "constraints"
|
||||
with the Valid constraint
|
||||
* moved data trimming logic of TrimListener into StringUtil
|
||||
|
||||
2.7.0
|
||||
-----
|
||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Form\Extension\Core\EventListener;
|
||||
use Symfony\Component\Form\FormEvents;
|
||||
use Symfony\Component\Form\FormEvent;
|
||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||
use Symfony\Component\Form\Util\StringUtil;
|
||||
|
||||
/**
|
||||
* Trims string data.
|
||||
@ -30,11 +31,7 @@ class TrimListener implements EventSubscriberInterface
|
||||
return;
|
||||
}
|
||||
|
||||
if (null !== $result = @preg_replace('/^[\pZ\p{Cc}]+|[\pZ\p{Cc}]+$/u', '', $data)) {
|
||||
$event->setData($result);
|
||||
} else {
|
||||
$event->setData(trim($data));
|
||||
}
|
||||
$event->setData(StringUtil::trim($data));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -39,67 +39,4 @@ class TrimListenerTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
$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