diff --git a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php
index cfc932843937..eff421ec4e71 100644
--- a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php
+++ b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php
@@ -304,6 +304,11 @@ private function convertParameters(array $parameters, $type, \DOMElement $parent
if (\in_array($value, ['null', 'true', 'false'], true)) {
$element->setAttribute('type', 'string');
}
+
+ if (\is_string($value) && (is_numeric($value) || preg_match('/^0b[01]*$/', $value) || preg_match('/^0x[0-9a-f]++$/i', $value))) {
+ $element->setAttribute('type', 'string');
+ }
+
$text = $this->document->createTextNode(self::phpToXml($value));
$element->appendChild($text);
}
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container8.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container8.php
index 5b3c01c23cd5..edcd045eaabb 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container8.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container8.php
@@ -9,6 +9,17 @@
'bar' => 'foo is %%foo bar',
'escape' => '@escapeme',
'values' => [true, false, null, 0, 1000.3, 'true', 'false', 'null'],
+ 'null string' => 'null',
+ 'string of digits' => '123',
+ 'string of digits prefixed with minus character' => '-123',
+ 'true string' => 'true',
+ 'false string' => 'false',
+ 'binary number string' => '0b0110',
+ 'numeric string' => '-1.2E2',
+ 'hexadecimal number string' => '0xFF',
+ 'float string' => '10100.1',
+ 'positive float string' => '+10100.1',
+ 'negative float string' => '-10100.1',
]));
return $container;
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php
index ce4815ef8197..e7a0214a10f5 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php
@@ -151,6 +151,17 @@ protected function getDefaultParameters()
6 => 'false',
7 => 'null',
],
+ 'null string' => 'null',
+ 'string of digits' => '123',
+ 'string of digits prefixed with minus character' => '-123',
+ 'true string' => 'true',
+ 'false string' => 'false',
+ 'binary number string' => '0b0110',
+ 'numeric string' => '-1.2E2',
+ 'hexadecimal number string' => '0xFF',
+ 'float string' => '10100.1',
+ 'positive float string' => '+10100.1',
+ 'negative float string' => '-10100.1',
];
}
}
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services8.xml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services8.xml
index d0f9015c5a54..4b07bbb7da50 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services8.xml
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services8.xml
@@ -18,6 +18,17 @@
false
null
+ null
+ 123
+ -123
+ true
+ false
+ 0b0110
+ -1.2E2
+ 0xFF
+ 10100.1
+ +10100.1
+ -10100.1
diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services8.yml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services8.yml
index 4e37bc9315c9..002b1d4bcd3a 100644
--- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services8.yml
+++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services8.yml
@@ -4,6 +4,17 @@ parameters:
bar: 'foo is %%foo bar'
escape: '@@escapeme'
values: [true, false, null, 0, 1000.3, 'true', 'false', 'null']
+ null string: 'null'
+ string of digits: '123'
+ string of digits prefixed with minus character: '-123'
+ true string: 'true'
+ false string: 'false'
+ binary number string: '0b0110'
+ numeric string: '-1.2E2'
+ hexadecimal number string: '0xFF'
+ float string: '10100.1'
+ positive float string: '+10100.1'
+ negative float string: '-10100.1'
services:
service_container: