diff options
| author | Felipe Pena <felipe@php.net> | 2009-06-30 11:46:20 +0000 |
|---|---|---|
| committer | Felipe Pena <felipe@php.net> | 2009-06-30 11:46:20 +0000 |
| commit | 0e294f21212bf7b6d52847f7e68aa0f30b7ad4cc (patch) | |
| tree | 5fceef8364e574285e62597919b48550093b3258 | |
| parent | 51f8b64752b94e8e2b63f5218a52e6e7c1ab1802 (diff) | |
| download | php-git-0e294f21212bf7b6d52847f7e68aa0f30b7ad4cc.tar.gz | |
- MFH: Fixed bug #48709 (metaphone and 'wh')
| -rw-r--r-- | ext/standard/metaphone.c | 7 | ||||
| -rw-r--r-- | ext/standard/tests/strings/bug48709.phpt | 31 |
2 files changed, 34 insertions, 4 deletions
diff --git a/ext/standard/metaphone.c b/ext/standard/metaphone.c index bf66a79b86..d39ea13194 100644 --- a/ext/standard/metaphone.c +++ b/ext/standard/metaphone.c @@ -225,15 +225,14 @@ static int metaphone(unsigned char *word, int word_len, long max_phonemes, char w_idx += 2; } break; - /* WH becomes H, + /* WH becomes W, WR becomes R W if followed by a vowel */ case 'W': - if (Next_Letter == 'H' || - Next_Letter == 'R') { + if (Next_Letter == 'R') { Phonize(Next_Letter); w_idx += 2; - } else if (isvowel(Next_Letter)) { + } else if (Next_Letter == 'H' || isvowel(Next_Letter)) { Phonize('W'); w_idx += 2; } diff --git a/ext/standard/tests/strings/bug48709.phpt b/ext/standard/tests/strings/bug48709.phpt new file mode 100644 index 0000000000..999a2c6513 --- /dev/null +++ b/ext/standard/tests/strings/bug48709.phpt @@ -0,0 +1,31 @@ +--TEST-- +Bug #48709 (metaphone and 'wh') +--FILE-- +<?php + +/* Initial letter exceptions */ +$exceptions = array( + 'kn', // Drop first letter + 'gn', // ditto + 'pn', // ditto + 'ae', // ditto + 'wr', // ditto + 'x', // s + 'wh', // w + 'wa' // w +); + +foreach ($exceptions as $letter) { + printf("%s => %s\n", $letter, metaphone($letter)); +} + +?> +--EXPECT-- +kn => N +gn => N +pn => N +ae => E +wr => R +x => S +wh => W +wa => W |
