diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 68c61886efd..1450e2f100f 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -373,38 +373,43 @@ function dol_string_unaccent($str) { if (utf8_check($str)) { + // See http://www.utf8-chartable.de/ $string = rawurlencode($str); $replacements = array( - '%C3%80' => 'A','%C3%81' => 'A', - '%C3%88' => 'E','%C3%89' => 'E', - '%C3%8C' => 'I','%C3%8D' => 'I', - '%C3%92' => 'O','%C3%93' => 'O', - '%C3%99' => 'U','%C3%9A' => 'U', - '%C3%A0' => 'a','%C3%A1' => 'a','%C3%A2' => 'a', + '%C3%80' => 'A','%C3%81' => 'A','%C3%82' => 'A','%C3%83' => 'A','%C3%84' => 'A','%C3%85' => 'A', + '%C3%88' => 'E','%C3%89' => 'E','%C3%8A' => 'E','%C3%8B' => 'E', + '%C3%8C' => 'I','%C3%8D' => 'I','%C3%8E' => 'I','%C3%8F' => 'I', + '%C3%92' => 'O','%C3%93' => 'O','%C3%94' => 'O','%C3%95' => 'O','%C3%96' => 'O', + '%C3%99' => 'U','%C3%9A' => 'U','%C3%9B' => 'U','%C3%9C' => 'U', + '%C3%A0' => 'a','%C3%A1' => 'a','%C3%A2' => 'a','%C3%A3' => 'a','%C3%A4' => 'a','%C3%A5' => 'a', + '%C3%A7' => 'c', '%C3%A8' => 'e','%C3%A9' => 'e','%C3%AA' => 'e','%C3%AB' => 'e', - '%C3%AC' => 'i','%C3%AD' => 'i','%C3%AE' => 'i', - '%C3%B2' => 'o','%C3%B3' => 'o', - '%C3%B9' => 'u','%C3%BA' => 'u' + '%C3%AC' => 'i','%C3%AD' => 'i','%C3%AE' => 'i','%C3%AF' => 'i', + '%C3%B1' => 'n', + '%C3%B2' => 'o','%C3%B3' => 'o','%C3%B4' => 'o','%C3%B5' => 'o','%C3%B6' => 'o', + '%C3%B9' => 'u','%C3%BA' => 'u','%C3%BB' => 'u','%C3%BC' => 'u', + '%C3%BF' => 'y' ); $string=strtr($string, $replacements); return rawurldecode($string); } else { + // See http://www.ascii-code.com/ $string = strtr( $str, - "\xC0\xC1\xC2\xC3\xC5\xC7 + "\xC0\xC1\xC2\xC3\xC4\xC5\xC7 \xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1 \xD2\xD3\xD4\xD5\xD8\xD9\xDA\xDB\xDD - \xE0\xE1\xE2\xE3\xE5\xE7\xE8\xE9\xEA\xEB + \xE0\xE1\xE2\xE3\xE4\xE5\xE7\xE8\xE9\xEA\xEB \xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF8 - \xF9\xFA\xFB\xFD\xFF", - "AAAAAC + \xF9\xFA\xFB\xFC\xFD\xFF", + "AAAAAAC EEEEIIIIDN OOOOOUUUY - aaaaaceeee + aaaaaaceeee iiiidnooooo - uuuyy" + uuuuyy" ); $string = strtr($string, array("\xC4"=>"Ae", "\xC6"=>"AE", "\xD6"=>"Oe", "\xDC"=>"Ue", "\xDE"=>"TH", "\xDF"=>"ss", "\xE4"=>"ae", "\xE6"=>"ae", "\xF6"=>"oe", "\xFC"=>"ue", "\xFE"=>"th")); return $string; diff --git a/test/phpunit/FunctionsLibTest.php b/test/phpunit/FunctionsLibTest.php index 2178ad6fb5a..dbb3f6d8b8d 100755 --- a/test/phpunit/FunctionsLibTest.php +++ b/test/phpunit/FunctionsLibTest.php @@ -364,7 +364,22 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase /** - * testDolTextIsHtml + * testDolUnaccent + * + * @return boolean + */ + public function testDolUnaccent() + { + // Text not already HTML + + $input="A string\nwith a à ä é è ë ï ü ö ÿ, &, < and >."; + $after=dol_string_unaccent($input); + $this->assertEquals("A string\nwith a a a e e e i u o y, &, < and >.",$after); + } + + + /** + * testDolUtf8Check * * @return void */