ID: 47480 Comment by: mmcnickle at gmail dot com Reported By: sehh at ionos dot gr Status: Open Bug Type: PCRE related Operating System: Linux PHP Version: 5.2.8 New Comment:
Yes, unfortunately trying to include locale and language specific cases is next to impossible for regular expression engine developers. The best that can be done, though far from ideal, is for the user to try to take these changes into account when they are crafting the regex: $target1 = "ÊÉÍÇÔ[Ç|Þ]ÑÁ"; // Greek; $target1 = "Stra[ss|ß]ebahn" // German Previous Comments: ------------------------------------------------------------------------ [2009-03-09 15:00:25] sehh at ionos dot gr I forgot the capital accented characters, so the above should read: "Ç" == "Þ" == "ç" == "¹" "Á" == "Ü" == "á" == "¶" etc.. Remember that in Greek, the accent may be omitted from capital letters or may be included for the first letter only. So that should produce proper case-insensitive results. ------------------------------------------------------------------------ [2009-03-09 14:54:32] sehh at ionos dot gr The PCRE library is wrong then. "Ç" is correctly defined in Unicode as "ç", but the library should also understand the meaning of "Ç" == "Þ" == "ç". This counts for all Greek accents: "Á" == "Ü" == "á" etc... Otherwise, the parameter "/i" is useless for the Greek language and thats why the current implementation does not work for Greek. Thank you for taking the time to look into this issue, much appreciated. ------------------------------------------------------------------------ [2009-03-09 14:31:03] mmcnickle at gmail dot com You're absolutely correct, I do not speak Greek. But neither does the PCRE library. It determines the uppercase/lowercase relationship between characters solely using Unicode properties. The lowercase of Ç is defined in Unicode as ç [1], not Þ. Therefore the case-insensitive search will not match. [1]http://www.fileformat.info/info/unicode/char/00c7/index.htm ------------------------------------------------------------------------ [2009-03-09 12:16:43] sehh at ionos dot gr Obviously you have no idea what you are talking about and obviously you don't speak Greek or know anything about the Greek language. The word "êéíçôÞñá" is capitalized as "ÊÉÍÇÔÇÑÁ". What you are suggesting is like capitalizing the word "engine" as "ENGiNE". Obviously, there is no word "ENGiNE", same way there is no word "ÊÉÍÇÔÞÑÁ" :) ------------------------------------------------------------------------ [2009-03-09 11:59:53] mmcnickle at gmail dot com The test case is wrong and the bug should be closed. The upper case search target is misspelled. $target1 = "ÊÉÍÇÔÇÑÁ"; $target2 = "êéíçôÞñá"; should read $target1 = "ÊÉÍÇÔÞÑÁ"; $target2 = "êéíçôÞñá"; (note the replacement of the second Ç with a capital Thorn (U+00DE). With this change I get the expected result: Actual Result ------------- Searching for: ÊÉÍÇÔÞÑÁ Result string: Ôï êõñßùò ôìÞìá ôïõ itworks, áõôü ðïõ ðåñéëáìâÜíåé ôïõò êõëßíäñïõò Found and replaced: 1 Searching for: êéíçôþñá Result string: Ôï êõñßùò ôìÞìá ôïõ itworks, áõôü ðïõ ðåñéëáìâÜíåé ôïõò êõëßíäñïõò Found and replaced: 1 ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/47480 -- Edit this bug report at http://bugs.php.net/?id=47480&edit=1