--- tests/Zend/View/Helper/FormRadioTest.php (revision 12418) +++ tests/Zend/View/Helper/FormRadioTest.php (working copy) @@ -340,6 +340,19 @@ $this->assertRegexp('/]*)(id="' . $id . '")/', $html); } } + + public function testDashesShouldNotBeFilteredFromId() + { + $name = "Foo"; + $value = -1; + $options = array($value => "Bar"); + $formRadio = new Zend_View_Helper_FormRadio(); + $formRadio->setView(new Zend_View()); + $html = $formRadio->formRadio($name, $value, null, $options); + $correct = 'id="' . $name . '-' . strval($value) . '"'; + $position = strpos($html, $correct); + $this->assertType("numeric", $position); + } } // Call Zend_View_Helper_FormRadioTest::main() if this source file is executed directly. Index: library/Zend/View/Helper/FormRadio.php =================================================================== --- library/Zend/View/Helper/FormRadio.php (revision 12418) +++ library/Zend/View/Helper/FormRadio.php (working copy) @@ -128,9 +128,17 @@ $endTag= '>'; } + // filter is same as Alnum, except - and _ are allowed also (ZF-4191) + require_once 'Zend/Filter/PregReplace.php'; + $unicodeEnabled = (@preg_match('/\pL/u', 'a')) ? true : false; + if (! $unicodeEnabled) { + $pattern = '/[^a-zA-Z0-9\-\_]/'; + } else { + $pattern = '/[^\p{L}\p{N}\-\_]/u'; + } + $filter = new Zend_Filter_PregReplace($pattern, ""); + // add radio buttons to the list. - require_once 'Zend/Filter/Alnum.php'; - $filter = new Zend_Filter_Alnum(); foreach ($options as $opt_value => $opt_label) { // Should the label be escaped?