/** * calculate the soundex value of the string * @param $lang string calculate soundex using a specific language specification (actually french/us only) * @param $source string string to calculate the soundex * @return string the soundex value **/ function createSoundex($lang = 'en') { $s = $this->toString(); if ($lang == 'fr') { if (strlen($s) > 0) { $s = StringBuffer::removeAccents($s); $s = StringBuffer::keepSpaceOnly($s); $s = StringBuffer::toUpperCase($s); $s = preg_replace('/(.)\\1/', '\\1', $s); $first_letter = $s[0]; $s = ereg_replace('AEIOUYHW', '', $s); $s = strtr('112223345567788899', 'BPCKQDTLMNRGJXZSFV', $s); $s = $first_letter . $s; if (strlen($s) < 4) { $s = $s . str_repeat('0', 4 - strlen($s)); } else { $s = substr($s, 0, 4); } return new StringBuffer($s); } return FALSE; } else { return new StringBuffer(soundex($s)); } }