PASTEBIN
| #1 paste tool since 2002
create new paste
tools
api
archive
real-time
faq
PASTEBIN
create new paste
trending pastes
sign up
login
my settings
my profile
Public Pastes
Dire_red Password ...
HTML | 1 sec ago
Untitled
8 sec ago
Untitled
4 sec ago
Netflix Premium Ac...
6 sec ago
Untitled
8 sec ago
Untitled
11 sec ago
Untitled
11 sec ago
Untitled
11 sec ago
DoubleMetaphone Algorithm
By: a guest on Dec 15th, 2011 | syntax:
PHP
| size: 31.42 KB | hits: 12 | expires: Never
download
|
raw
|
embed
|
report abuse
Copied
<?php
class
Dm
{
public
static
function
search
(
$string
,
$start
,
$length
,
$needles
,
$mode
=
true
)
{
$treffer
=
false
;
$fails
=
0
;
foreach
(
$needles
AS
$needle
)
{
if
(
$mode
==
true
)
{
if
(
substr
(
$string
,
$start
,
$length
)
==
$needle
)
{
$treffer
=
true
;
}
}
else
{
if
(
substr
(
$string
,
$start
,
$length
)
!=
$needle
)
{
$treffer
=
true
;
}
else
{
$fails
++;
}
}
}
if
(
$treffer
==
true
&&
$fails
==
0
)
{
return
true
;
}
return
false
;
}
public
static
function
convert
(
$st
)
{
// Initial
$length
=
0
;
$first
=
0
;
$last
=
0
;
$pos
=
0
;
$prevpos
=
0
;
$isSlavoGermanic
=
0
;
$pri
=
''
;
$sec
=
''
;
$ch
=
''
;
// Start
$first
=
0
;
$length
=
strlen
(
$st
)
;
$last
=
$first
+
$length
-
1
;
$st
=
strtoupper
(
$st
)
;
//$st = str_repeat('-', $first) . strtoupper($st) . str_repeat(' ', 5);
if
(
stripos
(
$st
,
'W'
)
!==
false
||
stripos
(
$st
,
'K'
)
!==
false
||
stripos
(
$st
,
'CZ'
)
!==
false
)
{
$isSlavoGermanic
=
1
;
}
$pos
=
$first
;
$tmp
=
substr
(
$st
,
$pos
,
2
)
;
switch
(
$tmp
)
{
case
'GN'
:
case
'KN'
:
case
'PN'
:
case
'WR'
:
case
'PS'
:
$pos
++;
break
;
default
:
break
;
}
if
(
substr
(
$st
,
$first
,
1
)
==
'X'
)
{
$pri
=
'S'
;
$sec
=
'S'
;
$pos
++;
}
while
(
$pos
<=
$last
)
{
$prevpos
=
$pos
;
$ch
=
substr
(
$st
,
$pos
,
1
)
;
switch
(
$ch
)
{
case
'A'
:
case
'E'
:
case
'I'
:
case
'O'
:
case
'U'
:
case
'Y'
:
if
(
$pos
==
$first
)
{
$pri
=
$pri
.
'A'
;
$sec
=
$sec
.
'A'
;
$pos
++;
}
else
{
$pos
++;
}
break
;
case
'B'
:
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'B'
)
{
$pri
=
$pri
.
'P'
;
$sec
=
$sec
.
'P'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'P'
;
$sec
=
$sec
.
'P'
;
$pos
++;
}
break
;
case
'C'
:
if
(
$pos
>
$first
+
1
&&
self
::
search
(
$st
,
$pos
-
2
,
1
,
array
(
'A'
,
'E'
,
'I'
,
'O'
,
'U'
,
'Y'
)
,
false
)
&&
substr
(
$st
,
$pos
-
1
,
3
)
==
'ACH'
&&
(
self
::
search
(
$st
,
$pos
+
2
,
1
,
array
(
'I'
,
'E'
)
,
false
)
||
self
::
search
(
$st
,
$pos
-
2
,
6
,
array
(
'BACHER'
,
'MACHER'
)
)
)
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
elseif
(
$pos
==
$first
&&
substr
(
$st
,
$first
,
6
)
==
'CAESAR'
)
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'S'
;
$pos
=
$pos
+
2
;
}
elseif
(
substr
(
$st
,
$pos
,
4
)
==
'CHIA'
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
elseif
(
substr
(
$st
,
$pos
,
2
)
==
'CH'
)
{
if
(
$pos
>
$first
&&
substr
(
$st
,
$pos
,
4
)
==
'CHAE'
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'X'
;
$pos
=
$pos
+
2
;
}
elseif
(
$pos
==
$first
&&
(
self
::
search
(
$st
,
$pos
+
1
,
5
,
array
(
'HARAC'
,
'HARIS'
)
)
||
self
::
search
(
$st
,
$pos
+
1
,
3
,
array
(
'HOR'
,
'HYM'
,
'HIA'
,
'HEM'
)
)
)
&&
substr
(
$st
,
$first
,
5
)
!=
'CHORE'
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
elseif
(
self
::
search
(
$st
,
$first
,
4
,
array
(
'VAN '
,
'VON '
)
)
||
substr
(
$st
,
$first
,
3
)
==
'SCH'
||
self
::
search
(
$st
,
$pos
-
2
,
6
,
array
(
'ORCHES'
,
'ARCHIT'
,
'ORCHID'
)
)
||
self
::
search
(
$st
,
$pos
+
2
,
1
,
array
(
'T'
,
'S'
)
)
||
(
(
self
::
search
(
$st
,
$pos
-
1
,
1
,
array
(
'A'
,
'O'
,
'U'
,
'E'
)
)
||
$pos
==
$first
)
&&
self
::
search
(
$st
,
$pos
+
2
,
1
,
array
(
'L'
,
'R'
,
'N'
,
'M'
,
'B'
,
'H'
,
'F'
,
'V'
,
'W'
,
' '
)
)
)
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
else
{
if
(
$pos
>
$first
)
{
if
(
substr
(
$st
,
$first
,
2
)
==
'MC'
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'X'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
}
else
{
$pri
=
$pri
.
'X'
;
$sec
=
$sec
.
'X'
;
$pos
=
$pos
+
2
;
}
}
}
elseif
(
substr
(
$st
,
$pos
,
2
)
==
'CZ'
&&
strpos
(
$st
,
$pos
-
2
,
4
)
!=
'WICZ'
)
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'X'
;
$pos
=
$pos
+
2
;
}
elseif
(
substr
(
$st
,
$pos
+
1
,
3
)
==
'CIA'
)
{
$pri
=
$pri
.
'X'
;
$sec
=
$sec
.
'X'
;
$pos
=
$pos
+
3
;
}
elseif
(
substr
(
$st
,
$pos
,
2
)
==
'CC'
&&
(
$pos
!=
$first
+
1
&&
substr
(
$st
,
$first
,
1
)
!=
'M'
)
)
{
if
(
self
::
search
(
$st
,
$pos
+
2
,
1
,
array
(
'I'
,
'E'
,
'H'
)
)
&&
substr
(
$st
,
$pos
+
2
,
2
)
!=
'HU'
)
{
if
(
$pos
==
$first
+
1
&&
substr
(
$st
,
$first
,
1
)
==
'A'
||
self
::
search
(
$st
,
$pos
-
1
,
5
,
array
(
'UCCEE'
,
'UCCES'
)
)
)
{
$pri
=
$pri
.
'KS'
;
$sec
=
$sec
.
'KS'
;
$pos
=
$pos
+
3
;
}
else
{
$pri
=
$pri
.
'X'
;
$sec
=
$sec
.
'X'
;
$pos
=
$pos
+
3
;
}
}
else
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
}
elseif
(
self
::
search
(
$st
,
$pos
,
2
,
array
(
'CK'
,
'CG'
,
'CQ'
)
)
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
elseif
(
self
::
search
(
$st
,
$pos
,
2
,
array
(
'CI'
,
'CE'
,
'CY'
)
)
)
{
if
(
self
::
search
(
$st
,
$pos
,
3
,
array
(
'CIO'
,
'CIE'
,
'CIA'
)
)
)
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'X'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'S'
;
$pos
=
$pos
+
2
;
}
}
else
{
if
(
self
::
search
(
$st
,
$pos
+
1
,
2
,
array
(
' C'
,
' Q'
,
' G'
)
)
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
3
;
}
else
{
if
(
self
::
search
(
$st
,
$pos
+
1
,
1
,
array
(
'C'
,
'K'
,
'Q'
)
)
&&
self
::
search
(
$st
,
$pos
+
1
,
2
,
array
(
'CE'
,
'CI'
)
,
false
)
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
++;
}
}
}
break
;
case
'D'
:
if
(
substr
(
$st
,
$pos
,
2
)
==
'DG'
)
{
$tmp
=
substr
(
$st
,
$pos
+
2
,
1
)
;
if
(
$tmp
==
'I'
||
$tmp
==
'E'
||
$tmp
==
'Y'
)
{
$pri
=
$pri
.
'J'
;
$sec
=
$sec
.
'J'
;
$pos
=
$pos
+
3
;
}
else
{
$pri
=
$pri
.
'TK'
;
$sec
=
$sec
.
'TK'
;
$pos
=
$pos
+
2
;
}
}
elseif
(
self
::
search
(
$st
,
$pos
,
2
,
array
(
'DT'
,
'DD'
)
)
)
{
$pri
=
$pri
.
'T'
;
$sec
=
$sec
.
'T'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'T'
;
$sec
=
$sec
.
'T'
;
$pos
++;
}
break
;
case
'F'
:
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'V'
)
{
$pri
=
$pri
.
'F'
;
$sec
=
$sec
.
'F'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'F'
;
$sec
=
$sec
.
'F'
;
$pos
++;
}
break
;
case
'G'
:
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'H'
)
{
if
(
(
$pos
>
$first
&&
self
::
search
(
$st
,
$pos
-
1
,
1
,
array
(
'A'
,
'E'
,
'I'
,
'O'
,
'U'
,
'Y'
)
,
false
)
)
||
(
$pos
==
$first
&&
substr
(
$st
,
$pos
+
2
,
1
)
!=
'I'
)
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
elseif
(
$pos
==
$first
&&
substr
(
$st
,
$pos
+
2
,
1
)
==
'I'
)
{
$pri
=
$pri
.
'J'
;
$sec
=
$sec
.
'J'
;
$pos
=
$pos
+
2
;
}
elseif
(
(
$pos
>
$first
+
1
&&
self
::
search
(
$st
,
$pos
-
2
,
1
,
array
(
'B'
,
'H'
,
'D'
)
)
)
||
(
$pos
>
$first
+
2
&&
self
::
search
(
$st
,
$pos
-
3
,
1
,
array
(
'B'
,
'H'
,
'D'
)
)
)
||
(
$pos
>
$first
+
3
&&
self
::
search
(
$st
,
$pos
-
4
,
1
,
array
(
'B'
,
'H'
)
)
)
)
{
$pos
=
$pos
+
2
;
}
else
{
if
(
$pos
>
$first
+
2
&&
substr
(
$st
,
$pos
-
1
,
1
)
==
'U'
&&
self
::
search
(
$st
,
$pos
-
3
,
1
,
array
(
'C'
,
'G'
,
'L'
,
'R'
,
'T'
)
)
)
{
$pri
=
$pri
.
'F'
;
$sec
=
$sec
.
'F'
;
$pos
=
$pos
+
2
;
}
elseif
(
$pos
>
$first
&&
substr
(
$st
,
$pos
-
1
,
1
)
!=
'I'
)
{
$pri
=
$pri
.
'F'
;
$sec
=
$sec
.
'F'
;
$pos
=
$pos
+
2
;
}
else
{
$pos
++;
}
}
}
elseif
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'N'
)
{
if
(
$pos
==
$first
+
1
&&
self
::
search
(
$st
,
$first
,
1
,
array
(
'A'
,
'E'
,
'I'
,
'O'
,
'U'
,
'Y'
)
)
&&
$isSlavoGermanic
==
0
)
{
$pri
=
$pri
.
'KN'
;
$sec
=
$sec
.
'N'
;
$pos
=
$pos
+
2
;
}
else
{
if
(
substr
(
$st
,
$pos
+
2
,
2
)
!=
'EY'
&&
substr
(
$st
,
$pos
+
1
,
1
)
!=
'Y'
&&
$isSlavoGermanic
!=
1
)
{
$pri
=
$pri
.
'N'
;
$sec
=
$sec
.
'KN'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'KN'
;
$sec
=
$sec
.
'KN'
;
$pos
=
$pos
+
2
;
}
}
}
elseif
(
substr
(
$st
,
$pos
+
1
,
2
)
==
'LI'
&&
$isSlavoGermanic
==
0
)
{
$pri
=
$pri
.
'KL'
;
$sec
=
$sec
.
'L'
;
$pos
=
$pos
+
2
;
}
elseif
(
$pos
==
$first
&&
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'Y'
||
self
::
search
(
$st
,
$pos
+
1
,
2
,
array
(
'ES'
,
'EP'
,
'EB'
,
'EL'
,
'EY'
,
'IB'
,
'IL'
,
'IN'
,
'IE'
,
'EI'
,
'ER'
)
)
)
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'J'
;
$pos
=
$pos
+
2
;
}
elseif
(
substr
(
$st
,
$pos
+
1
,
2
)
==
'ER'
||
substr
(
$st
,
$pos
+
1
,
1
)
==
'Y'
&&
self
::
search
(
$st
,
$first
,
6
,
array
(
'DANGER'
,
'RANGER'
,
'MANGER'
)
,
false
)
&&
self
::
search
(
$st
,
$pos
-
1
,
1
,
array
(
'E'
,
'I'
)
,
false
)
&&
self
::
search
(
$st
,
$pos
-
1
,
3
,
array
(
'RGY'
,
'OGY'
)
,
false
)
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'J'
;
$pos
=
$pos
+
2
;
}
elseif
(
self
::
search
(
$st
,
$pos
+
1
,
1
,
array
(
'E'
,
'I'
,
'Y'
)
)
||
self
::
search
(
$st
,
$pos
-
1
,
4
,
array
(
'AGGI'
,
'OGGI'
)
)
)
{
if
(
self
::
search
(
$st
,
$first
,
4
,
array
(
'VON '
,
'VAN '
)
)
||
substr
(
$st
,
$first
,
3
)
==
'SCH'
||
substr
(
$st
,
$pos
+
1
,
2
)
==
'ET'
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
else
{
if
(
substr
(
$st
,
$pos
+
1
,
4
)
==
'IER '
)
{
$pri
=
$pri
.
'J'
;
$sec
=
$sec
.
'J'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'J'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
}
}
elseif
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'G'
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
++;
}
break
;
case
'H'
:
if
(
(
$pos
==
$first
||
self
::
search
(
$st
,
$pos
-
1
,
1
,
array
(
'A'
,
'E'
,
'I'
,
'O'
,
'U'
,
'Y'
)
)
)
&&
self
::
search
(
$st
,
$pos
+
1
,
1
,
array
(
'A'
,
'E'
,
'I'
,
'O'
,
'U'
,
'Y'
)
)
)
{
$pri
=
$pri
.
'H'
;
$sec
=
$sec
.
'H'
;
$pos
=
$pos
+
2
;
}
else
{
$pos
++;
}
break
;
case
'J'
:
if
(
substr
(
$st
,
$pos
,
4
)
==
'JOSE'
||
substr
(
$st
,
$first
,
4
)
==
'SAN '
)
{
if
(
(
$pos
==
$first
&&
substr
(
$st
,
$pos
+
4
,
1
)
==
' '
)
||
substr
(
$st
,
$first
,
4
)
==
'SAN '
)
{
$pri
=
$pri
.
'H'
;
$sec
=
$sec
.
'H'
;
}
else
{
$pri
=
$pri
.
'J'
;
$sec
=
$sec
.
'H'
;
}
}
elseif
(
$pos
==
$first
&&
substr
(
$st
,
$pos
,
4
)
!=
'JOSE'
)
{
$pri
=
$pri
.
'J'
;
$sec
=
$sec
.
'A'
;
}
else
{
if
(
self
::
search
(
$st
,
$pos
-
1
,
1
,
array
(
'A'
,
'E'
,
'I'
,
'O'
,
'U'
,
'Y'
)
)
&&
$isSlavoGermanic
==
0
&&
self
::
search
(
$st
,
$pos
+
1
,
1
,
array
(
'A'
,
'O'
)
)
)
{
$pri
=
$pri
.
'J'
;
$sec
=
$sec
.
'H'
;
}
else
{
if
(
$pos
==
$last
)
{
$pri
=
$pri
.
'J'
;
}
else
{
if
(
self
::
search
(
$st
,
$pos
+
1
,
1
,
array
(
'L'
,
'T'
,
'K'
,
'S'
,
'N'
,
'M'
,
'B'
,
'Z'
)
,
false
)
&&
self
::
search
(
$st
,
$pos
-
1
,
1
,
array
(
'S'
,
'K'
,
'L'
)
,
false
)
)
{
$pri
=
$pri
.
'J'
;
$sec
=
$sec
.
'J'
;
}
}
}
}
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'J'
)
{
$pos
=
$pos
+
2
;
}
else
{
$pos
++;
}
break
;
case
'K'
:
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'K'
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
++;
}
break
;
case
'L'
:
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'L'
)
{
if
(
(
$pos
==
$last
-
2
&&
self
::
search
(
$st
,
$pos
-
1
,
4
,
array
(
'ILLO'
,
'ILLA'
,
'ALLE'
)
)
)
||
(
(
self
::
search
(
$st
,
$last
-
1
,
2
,
array
(
'AS'
,
'OS'
)
)
||
self
::
search
(
$st
,
$last
,
null
,
array
(
'A'
,
'O'
)
)
)
&&
substr
(
$st
,
$pos
-
1
,
4
==
'ALLE'
)
)
)
{
$pri
=
$pri
.
'L'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'L'
;
$sec
=
$sec
.
'L'
;
$pos
=
$pos
+
2
;
}
}
else
{
$pri
=
$pri
.
'L'
;
$sec
=
$sec
.
'L'
;
$pos
++;
}
break
;
case
'M'
:
if
(
substr
(
$st
,
$pos
-
1
,
3
)
==
'UMB'
&&
(
$pos
+
1
==
$last
||
substr
(
$st
,
$pos
+
2
,
2
)
==
'ER'
)
||
substr
(
$st
,
$pos
+
1
,
1
)
==
'M'
)
{
$pri
=
$pri
.
'M'
;
$sec
=
$sec
.
'M'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'M'
;
$sec
=
$sec
.
'M'
;
$pos
++;
}
break
;
case
'N'
:
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'N'
)
{
$pri
=
$pri
.
'N'
;
$sec
=
$sec
.
'N'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'N'
;
$sec
=
$sec
.
'N'
;
$pos
++;
}
break
;
case
'P'
:
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'H'
)
{
$pri
=
$pri
.
'F'
;
$sec
=
$sec
.
'F'
;
$pos
=
$pos
+
2
;
}
elseif
(
self
::
search
(
$st
,
$pos
+
1
,
1
,
array
(
'P'
,
'B'
)
)
)
{
$pri
=
$pri
.
'P'
;
$sec
=
$sec
.
'P'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'P'
;
$sec
=
$sec
.
'P'
;
$pos
++;
}
break
;
case
'Q'
:
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'Q'
)
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'K'
;
$sec
=
$sec
.
'K'
;
$pos
++;
}
break
;
case
'R'
:
if
(
$pos
==
$last
&&
$isSlavoGermanic
!=
1
&&
substr
(
$st
,
$pos
-
2
,
2
)
==
'IE'
&&
self
::
search
(
$st
,
$pos
-
4
,
2
,
array
(
'ME'
,
'MA'
)
,
false
)
)
{
$sec
=
$sec
.
'R'
;
}
else
{
$pri
=
$pri
.
'R'
;
$sec
=
$sec
.
'R'
;
}
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'R'
)
{
$pos
=
$pos
+
2
;
}
else
{
$pos
++;
}
break
;
case
'S'
:
if
(
self
::
search
(
$st
,
$pos
-
1
,
3
,
array
(
'ISL'
,
'YSL'
)
)
)
{
$pos
++;
}
elseif
(
$pos
==
$first
&&
substr
(
$st
,
$first
,
5
)
==
'SUGAR'
)
{
$pri
=
$pri
.
'X'
;
$sec
=
$sec
.
'S'
;
$pos
=
$pos
++;
}
elseif
(
substr
(
$st
,
$pos
,
2
)
==
'SH'
)
{
if
(
self
::
search
(
$st
,
$pos
+
1
,
4
,
array
(
'HEIM'
,
'HOEK'
,
'HOLM'
,
'HOLZ'
)
)
)
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'S'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'X'
;
$sec
=
$sec
.
'X'
;
$pos
=
$pos
+
2
;
}
}
elseif
(
self
::
search
(
$st
,
$pos
,
3
,
array
(
'SIO'
,
'SIA'
)
)
||
substr
(
$st
,
$pos
,
4
)
==
'SIAN'
)
{
if
(
$isSlavoGermanic
!=
1
)
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'X'
;
$pos
=
$pos
+
3
;
}
else
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'S'
;
$pos
=
$pos
+
3
;
}
}
elseif
(
(
$pos
==
$first
&&
self
::
search
(
$st
,
$pos
+
1
,
1
,
array
(
'M'
,
'N'
,
'L'
,
'W'
)
)
)
||
substr
(
$st
,
$pos
+
1
,
1
)
==
'Z'
)
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'X'
;
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'Z'
)
{
$pos
=
$pos
+
2
;
}
else
{
$pos
++;
}
}
elseif
(
substr
(
$st
,
$pos
,
2
)
==
'SC'
)
{
if
(
substr
(
$st
,
$pos
+
2
,
1
)
==
'H'
)
{
if
(
self
::
search
(
$st
,
$pos
+
3
,
2
,
array
(
'OO'
,
'ER'
,
'EN'
,
'UY'
,
'ED'
,
'EM'
)
)
)
{
if
(
self
::
search
(
$st
,
$pos
+
3
,
2
,
array
(
'ER'
,
'EN'
)
)
)
{
$pri
=
$pri
.
'X'
;
$sec
=
$sec
.
'SK'
;
$pos
=
$pos
+
3
;
}
else
{
$pri
=
$pri
.
'SK'
;
$sec
=
$sec
.
'SK'
;
$pos
=
$pos
+
3
;
}
}
else
{
if
(
$pos
==
$first
&&
self
::
search
(
$st
,
$first
+
3
,
1
,
array
(
'A'
,
'E'
,
'I'
,
'O'
,
U
,
Y
)
,
false
&&
substr
(
$st
,
$first
+
3
,
1
)
!=
'W'
)
)
{
$pri
=
$pri
.
'X'
;
$sec
=
$sec
.
'S'
;
$pos
=
$pos
+
3
;
}
else
{
$pri
=
$pri
.
'X'
;
$sec
=
$sec
.
'X'
;
$pos
=
$pos
+
3
;
}
}
}
elseif
(
self
::
search
(
$st
,
$pos
+
2
,
1
,
array
(
'I'
,
'E'
,
'Y'
)
)
)
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'S'
;
$pos
=
$pos
+
3
;
}
else
{
$pri
=
$pri
.
'SK'
;
$sec
=
$sec
.
'SK'
;
$pos
=
$pos
+
3
;
}
}
elseif
(
$pos
==
$last
&&
self
::
search
(
$st
,
$pos
-
2
,
2
,
array
(
'AI'
,
'OI'
)
)
)
{
$sec
=
$sec
.
'S'
;
$pos
++;
}
else
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'S'
;
if
(
self
::
search
(
$st
,
$pos
+
1
,
1
,
array
(
'S'
,
'Z'
)
)
)
{
$pos
=
$pos
+
2
;
}
else
{
$pos
++;
}
}
break
;
case
'T'
:
if
(
substr
(
$st
,
$pos
,
4
)
==
'TION'
)
{
$pri
=
$pri
.
'X'
;
$sec
=
$sec
.
'X'
;
$pos
=
$pos
+
3
;
}
elseif
(
self
::
search
(
$st
,
$pos
,
3
,
array
(
'TIA'
,
'TCH'
)
)
)
{
$pri
=
$pri
.
'X'
;
$sec
=
$sec
.
'X'
;
$pos
=
$pos
+
3
;
}
elseif
(
substr
(
$st
,
$pos
,
2
)
==
'TH'
||
substr
(
$st
,
$pos
,
3
)
==
'TTH'
)
{
if
(
self
::
search
(
$st
,
$pos
+
2
,
2
,
array
(
'OM'
,
'AM'
)
)
||
self
::
search
(
$st
,
$first
,
4
,
array
(
'VON '
,
'VAN '
)
)
||
substr
(
$st
,
$first
,
3
)
==
'SCH'
)
{
$pri
=
$pri
.
'T'
;
$sec
=
$sec
.
'T'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'O'
;
$sec
=
$sec
.
'T'
;
$pos
=
$pos
+
2
;
}
}
elseif
(
self
::
search
(
$st
,
$pos
+
1
,
1
,
array
(
'T'
,
'D'
)
)
)
{
$pri
=
$pri
.
'T'
;
$sec
=
$sec
.
'T'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'T'
;
$sec
=
$sec
.
'T'
;
$pos
=
$pos
++;
}
break
;
case
'V'
:
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'V'
)
{
$pri
=
$pri
.
'F'
;
$sec
=
$sec
.
'F'
;
$pos
=
$pos
+
2
;
}
else
{
$pri
=
$pri
.
'F'
;
$sec
=
$sec
.
'F'
;
$pos
=
$pos
++;
}
break
;
case
'W'
:
$tmp
=
substr
(
$st
,
$pos
+
1
,
1
)
;
$tmp2
=
substr
(
$st
,
$pos
-
1
,
1
)
;
$tmp3
=
substr
(
$st
,
$pos
-
1
,
5
)
;
if
(
substr
(
$st
,
$pos
,
2
)
==
'WR'
)
{
$pri
=
$pri
.
'R'
;
$sec
=
$pri
.
'R'
;
$pos
=
$pos
+
2
;
}
elseif
(
$pos
==
$first
&&
(
$tmp
==
'A'
||
$tmp
==
'E'
||
$tmp
==
'I'
||
$tmp
==
'O'
||
$tmp
==
'U'
||
$tmp
==
'Y'
||
substr
(
$st
,
$pos
,
2
)
==
'WH'
)
)
{
$tmp
=
substr
(
$st
,
$pos
+
1
,
1
)
;
if
(
$tmp
==
'A'
||
$tmp
==
'E'
||
$tmp
==
'I'
||
$tmp
==
'O'
||
$tmp
==
'U'
||
$tmp
==
'Y'
)
{
$pri
=
$pri
.
'A'
;
$sec
=
$sec
.
'F'
;
$pos
++;
}
else
{
$pri
=
$pri
.
'A'
;
$sec
=
$sec
.
'A'
;
$pos
++;
}
}
elseif
(
(
$pos
==
$last
&&
(
$tmp2
==
'A'
||
$tmp2
==
'E'
||
$tmp2
==
'I'
||
$tmp2
==
'O'
||
$tmp2
==
'U'
||
$tmp2
==
'Y'
)
)
||
$tmp3
==
'EWSKI'
||
$tmp3
==
'EWSKY'
||
$tmp3
==
'OWSKI'
||
$tmp3
==
'OWSKY'
||
substr
(
$st
,
$first
,
3
)
==
'SCH'
)
{
$sec
=
$sec
.
'F'
;
$pos
++;
}
elseif
(
substr
(
$st
,
$pos
,
4
)
==
'WICZ'
||
substr
(
$st
,
$pos
,
4
)
==
'WITZ'
)
{
$pri
=
$pri
.
'TS'
;
$sec
=
$sec
.
'FX'
;
$pos
=
$pos
+
4
;
}
else
{
$pos
++;
}
break
;
case
'X'
:
if
(
(
$pos
!=
$last
&&
(
substr
(
$st
,
$pos
-
3
,
3
)
!=
'IAU'
||
substr
(
$st
,
$pos
-
3
,
3
)
!=
'EAU'
)
)
||
(
substr
(
$st
,
$pos
-
2
,
2
)
!=
'AU'
||
substr
(
$st
,
$pos
-
2
,
2
)
!=
'OU'
)
)
{
$pri
=
$pri
.
'KS'
;
$sec
=
$sec
.
'KS'
;
}
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'C'
||
substr
(
$st
,
$pos
+
1
,
1
)
==
'X'
)
{
$pos
=
$pos
+
2
;
}
else
{
$pos
++;
}
break
;
case
'Z'
:
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'H'
)
{
$pri
=
$pri
.
'J'
;
$sec
=
$sec
.
'J'
;
$pos
++;
}
elseif
(
(
substr
(
$st
,
$pos
+
1
,
3
)
==
'ZO'
||
substr
(
$st
,
$pos
+
1
,
3
)
==
'ZI'
||
substr
(
$st
,
$pos
+
1
,
3
)
==
'ZA'
)
||
(
$isSlavoGermanic
==
1
&&
$pos
>
$first
&&
substr
(
$st
,
$pos
-
1
,
1
)
!=
'T'
)
)
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'TS'
;
}
else
{
$pri
=
$pri
.
'S'
;
$sec
=
$sec
.
'S'
;
}
if
(
substr
(
$st
,
$pos
+
1
,
1
)
==
'Z'
)
{
$pos
=
$pos
+
2
;
}
else
{
$pos
++;
}
break
;
default
:
$pos
++;
break
;
}
if
(
$pos
==
$prevpos
)
{
$pos
++;
}
}
if
(
$pri
!=
$sec
)
{
return
$pri
.
';'
.
$sec
;
}
return
$pri
;
}
}
create a
new version
of this paste
RAW Paste Data
<?php class Dm { public static function search($string, $start, $length, $needles, $mode = true) { $treffer = false; $fails = 0; foreach ($needles AS $needle) { if ($mode == true) { if (substr($string, $start, $length) == $needle) { $treffer = true; } } else { if (substr($string, $start, $length) != $needle) { $treffer = true; } else { $fails++; } } } if ($treffer == true && $fails == 0) { return true; } return false; } public static function convert($st) { // Initial $length = 0; $first = 0; $last = 0; $pos = 0; $prevpos = 0; $isSlavoGermanic = 0; $pri = ''; $sec = ''; $ch = ''; // Start $first = 0; $length = strlen($st); $last = $first + $length-1; $st = strtoupper($st); //$st = str_repeat('-', $first) . strtoupper($st) . str_repeat(' ', 5); if (stripos($st, 'W') !== false || stripos($st, 'K') !== false || stripos($st, 'CZ') !== false) { $isSlavoGermanic = 1; } $pos = $first; $tmp = substr($st, $pos, 2); switch ($tmp) { case 'GN': case 'KN': case 'PN': case 'WR': case 'PS': $pos++; break; default: break; } if (substr($st, $first, 1) == 'X') { $pri = 'S'; $sec = 'S'; $pos++; } while ($pos <= $last) { $prevpos = $pos; $ch = substr($st, $pos, 1); switch ($ch) { case 'A': case 'E': case 'I': case 'O': case 'U': case 'Y': if ($pos == $first) { $pri = $pri . 'A'; $sec = $sec . 'A'; $pos++; } else { $pos++; } break; case 'B': if (substr($st, $pos+1, 1) == 'B') { $pri = $pri . 'P'; $sec = $sec . 'P'; $pos = $pos + 2; } else { $pri = $pri . 'P'; $sec = $sec . 'P'; $pos++; } break; case 'C': if ($pos > $first+1 && self::search($st, $pos-2, 1, array('A', 'E', 'I', 'O', 'U', 'Y'), false) && substr($st, $pos-1, 3) == 'ACH' && (self::search($st, $pos+2, 1, array('I', 'E'), false) || self::search($st, $pos-2, 6, array('BACHER', 'MACHER'))) ) { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } elseif ($pos == $first && substr($st, $first, 6) == 'CAESAR') { $pri = $pri . 'S'; $sec = $sec . 'S'; $pos = $pos + 2; } elseif (substr($st, $pos, 4) == 'CHIA') { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } elseif (substr($st, $pos, 2) == 'CH') { if ($pos > $first && substr($st, $pos, 4) == 'CHAE') { $pri = $pri . 'K'; $sec = $sec . 'X'; $pos = $pos + 2; } elseif ($pos == $first && (self::search($st, $pos+1, 5, array('HARAC', 'HARIS')) || self::search($st, $pos+1, 3, array('HOR', 'HYM', 'HIA', 'HEM'))) && substr($st, $first, 5) != 'CHORE' ) { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } elseif (self::search($st, $first, 4, array('VAN ', 'VON ')) || substr($st, $first, 3) == 'SCH' || self::search($st, $pos-2, 6, array('ORCHES', 'ARCHIT', 'ORCHID')) || self::search($st, $pos+2, 1, array('T', 'S')) || ((self::search($st, $pos-1, 1, array('A', 'O', 'U', 'E')) || $pos == $first) && self::search($st, $pos+2, 1, array('L', 'R', 'N', 'M', 'B', 'H', 'F', 'V', 'W', ' '))) ) { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } else { if ($pos > $first) { if (substr($st, $first, 2) == 'MC') { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } else { $pri = $pri . 'X'; $sec = $sec . 'K'; $pos = $pos + 2; } } else { $pri = $pri . 'X'; $sec = $sec . 'X'; $pos = $pos + 2; } } } elseif (substr($st, $pos, 2) == 'CZ' && strpos($st, $pos-2, 4) != 'WICZ') { $pri = $pri . 'S'; $sec = $sec . 'X'; $pos = $pos + 2; } elseif (substr($st, $pos+1, 3) == 'CIA') { $pri = $pri . 'X'; $sec = $sec . 'X'; $pos = $pos + 3; } elseif (substr($st, $pos, 2) == 'CC' && ($pos != $first+1 && substr($st, $first, 1) != 'M')) { if (self::search($st, $pos+2, 1, array('I', 'E', 'H')) && substr($st, $pos+2, 2) != 'HU') { if ($pos == $first+1 && substr($st, $first, 1) == 'A' || self::search($st, $pos-1, 5, array('UCCEE', 'UCCES')) ) { $pri = $pri . 'KS'; $sec = $sec . 'KS'; $pos = $pos + 3; } else { $pri = $pri . 'X'; $sec = $sec . 'X'; $pos = $pos + 3; } } else { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } } elseif (self::search($st, $pos, 2, array('CK', 'CG', 'CQ'))) { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } elseif (self::search($st, $pos, 2, array('CI', 'CE', 'CY'))) { if (self::search($st, $pos, 3, array('CIO', 'CIE', 'CIA'))) { $pri = $pri . 'S'; $sec = $sec . 'X'; $pos = $pos + 2; } else { $pri = $pri . 'S'; $sec = $sec . 'S'; $pos = $pos + 2; } } else { if (self::search($st, $pos+1, 2, array(' C', ' Q', ' G'))) { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 3; } else { if (self::search($st, $pos+1, 1, array('C', 'K', 'Q')) && self::search($st, $pos+1, 2, array('CE', 'CI'), false) ) { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } else { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos++; } } } break; case 'D': if (substr($st, $pos, 2) == 'DG') { $tmp = substr($st, $pos+2, 1); if ($tmp == 'I' || $tmp == 'E' || $tmp == 'Y') { $pri = $pri . 'J'; $sec = $sec . 'J'; $pos = $pos + 3; } else { $pri = $pri . 'TK'; $sec = $sec . 'TK'; $pos = $pos + 2; } } elseif (self::search($st, $pos, 2, array('DT', 'DD'))) { $pri = $pri . 'T'; $sec = $sec . 'T'; $pos = $pos + 2; } else { $pri = $pri . 'T'; $sec = $sec . 'T'; $pos++; } break; case 'F': if (substr($st, $pos+1, 1) == 'V') { $pri = $pri . 'F'; $sec = $sec . 'F'; $pos = $pos + 2; } else { $pri = $pri . 'F'; $sec = $sec . 'F'; $pos++; } break; case 'G': if (substr($st, $pos+1, 1) == 'H') { if (($pos > $first && self::search($st, $pos-1, 1, array('A', 'E', 'I', 'O', 'U', 'Y'), false)) || ($pos == $first && substr($st, $pos+2, 1) != 'I') ) { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } elseif ($pos == $first && substr($st, $pos+2, 1) == 'I') { $pri = $pri . 'J'; $sec = $sec . 'J'; $pos = $pos + 2; } elseif (($pos > $first+1 && self::search($st, $pos-2, 1, array('B', 'H', 'D'))) || ($pos > $first+2 && self::search($st, $pos-3, 1, array('B', 'H', 'D'))) || ($pos > $first+3 && self::search($st, $pos-4, 1, array('B', 'H'))) ) { $pos = $pos + 2; } else { if ($pos > $first+2 && substr($st, $pos-1, 1) == 'U' && self::search($st, $pos-3, 1, array('C', 'G', 'L', 'R', 'T')) ) { $pri = $pri . 'F'; $sec = $sec . 'F'; $pos = $pos + 2; } elseif ($pos > $first && substr($st, $pos-1, 1) != 'I') { $pri = $pri . 'F'; $sec = $sec . 'F'; $pos = $pos + 2; } else { $pos++; } } } elseif (substr($st, $pos+1, 1) == 'N') { if ($pos == $first+1 && self::search($st, $first, 1, array('A', 'E', 'I', 'O', 'U', 'Y')) && $isSlavoGermanic == 0 ) { $pri = $pri . 'KN'; $sec = $sec . 'N'; $pos = $pos + 2; } else { if (substr($st, $pos+2, 2) != 'EY' && substr($st, $pos+1, 1) != 'Y' && $isSlavoGermanic != 1 ) { $pri = $pri . 'N'; $sec = $sec . 'KN'; $pos = $pos + 2; } else { $pri = $pri . 'KN'; $sec = $sec . 'KN'; $pos = $pos + 2; } } } elseif (substr($st, $pos+1, 2) == 'LI' && $isSlavoGermanic == 0) { $pri = $pri . 'KL'; $sec = $sec . 'L'; $pos = $pos + 2; } elseif ($pos == $first && (substr($st, $pos+1, 1) == 'Y' || self::search($st, $pos+1, 2, array('ES', 'EP', 'EB', 'EL', 'EY', 'IB', 'IL', 'IN', 'IE', 'EI', 'ER'))) ) { $pri = $pri . 'K'; $sec = $sec . 'J'; $pos = $pos + 2; } elseif (substr($st, $pos+1, 2) == 'ER' || substr($st, $pos+1, 1) == 'Y' && self::search($st, $first, 6, array('DANGER', 'RANGER', 'MANGER'), false) && self::search($st, $pos-1, 1, array('E', 'I'), false) && self::search($st, $pos-1, 3, array('RGY', 'OGY'), false) ) { $pri = $pri . 'K'; $sec = $sec . 'J'; $pos = $pos + 2; } elseif (self::search($st, $pos+1, 1, array('E', 'I', 'Y')) || self::search($st, $pos-1, 4, array('AGGI', 'OGGI')) ) { if (self::search($st, $first, 4, array('VON ', 'VAN ')) || substr($st, $first, 3) == 'SCH' || substr($st, $pos+1, 2) == 'ET' ) { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } else { if (substr($st, $pos+1, 4) == 'IER ') { $pri = $pri . 'J'; $sec = $sec . 'J'; $pos = $pos + 2; } else { $pri = $pri . 'J'; $sec = $sec . 'K'; $pos = $pos + 2; } } } elseif (substr($st, $pos+1, 1) == 'G') { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } else { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos++; } break; case 'H': if (($pos == $first || self::search($st, $pos-1, 1, array('A', 'E', 'I', 'O', 'U', 'Y'))) && self::search($st, $pos+1, 1, array('A', 'E', 'I', 'O', 'U', 'Y')) ) { $pri = $pri . 'H'; $sec = $sec . 'H'; $pos = $pos + 2; } else { $pos++; } break; case 'J': if (substr($st, $pos, 4) == 'JOSE' || substr($st, $first, 4) == 'SAN ') { if (($pos == $first && substr($st, $pos+4, 1) == ' ') || substr($st, $first, 4) == 'SAN ') { $pri = $pri . 'H'; $sec = $sec . 'H'; } else { $pri = $pri . 'J'; $sec = $sec . 'H'; } } elseif ($pos == $first && substr($st, $pos, 4) != 'JOSE') { $pri = $pri . 'J'; $sec = $sec . 'A'; } else { if (self::search($st, $pos-1, 1, array('A', 'E', 'I', 'O', 'U', 'Y')) && $isSlavoGermanic == 0 && self::search($st, $pos+1, 1, array('A', 'O')) ) { $pri = $pri . 'J'; $sec = $sec . 'H'; } else { if ($pos == $last) { $pri = $pri . 'J'; } else { if (self::search($st, $pos+1, 1, array('L', 'T', 'K', 'S', 'N', 'M', 'B', 'Z'), false) && self::search($st, $pos-1, 1, array('S', 'K', 'L'), false) ) { $pri = $pri . 'J'; $sec = $sec . 'J'; } } } } if (substr($st, $pos+1, 1) == 'J') { $pos = $pos + 2; } else { $pos++; } break; case 'K': if (substr($st, $pos+1, 1) == 'K') { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos + 2; } else { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos++; } break; case 'L': if (substr($st, $pos+1, 1) == 'L') { if (($pos == $last-2 && self::search($st, $pos-1, 4, array('ILLO', 'ILLA', 'ALLE'))) || ((self::search($st, $last-1, 2, array('AS', 'OS')) || self::search($st, $last, null, array('A', 'O'))) && substr($st, $pos-1, 4 == 'ALLE')) ) { $pri = $pri . 'L'; $pos = $pos + 2; } else { $pri = $pri . 'L'; $sec = $sec . 'L'; $pos = $pos + 2; } } else { $pri = $pri . 'L'; $sec = $sec . 'L'; $pos++; } break; case 'M': if (substr($st, $pos-1, 3) == 'UMB' && ($pos+1 == $last || substr($st, $pos+2, 2) == 'ER') || substr($st, $pos+1, 1) == 'M' ) { $pri = $pri . 'M'; $sec = $sec . 'M'; $pos = $pos + 2; } else { $pri = $pri . 'M'; $sec = $sec . 'M'; $pos++; } break; case 'N': if (substr($st, $pos+1, 1) == 'N') { $pri = $pri . 'N'; $sec = $sec . 'N'; $pos = $pos + 2; } else { $pri = $pri . 'N'; $sec = $sec . 'N'; $pos++; } break; case 'P': if (substr($st, $pos+1, 1) == 'H') { $pri = $pri . 'F'; $sec = $sec . 'F'; $pos = $pos + 2; } elseif (self::search($st, $pos+1, 1, array('P', 'B'))) { $pri = $pri . 'P'; $sec = $sec . 'P'; $pos = $pos + 2; } else { $pri = $pri . 'P'; $sec = $sec . 'P'; $pos++; } break; case 'Q': if (substr($st, $pos+1, 1) == 'Q') { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos = $pos +2; } else { $pri = $pri . 'K'; $sec = $sec . 'K'; $pos++; } break; case 'R': if ($pos == $last && $isSlavoGermanic != 1 && substr($st, $pos-2, 2) == 'IE' && self::search($st, $pos-4, 2, array('ME', 'MA'), false) ) { $sec = $sec . 'R'; } else { $pri = $pri . 'R'; $sec = $sec . 'R'; } if (substr($st, $pos+1, 1) == 'R') { $pos = $pos + 2; } else { $pos++; } break; case 'S': if (self::search($st, $pos-1, 3, array('ISL', 'YSL'))) { $pos++; } elseif ($pos == $first && substr($st, $first, 5) == 'SUGAR') { $pri = $pri . 'X'; $sec = $sec . 'S'; $pos = $pos++; } elseif (substr($st, $pos, 2) == 'SH') { if (self::search($st, $pos+1, 4, array('HEIM', 'HOEK', 'HOLM', 'HOLZ'))) { $pri = $pri . 'S'; $sec = $sec . 'S'; $pos = $pos + 2; } else { $pri = $pri . 'X'; $sec = $sec . 'X'; $pos = $pos + 2; } } elseif (self::search($st, $pos, 3, array('SIO', 'SIA')) || substr($st, $pos, 4) == 'SIAN') { if ($isSlavoGermanic != 1) { $pri = $pri . 'S'; $sec = $sec . 'X'; $pos = $pos + 3; } else { $pri = $pri . 'S'; $sec = $sec . 'S'; $pos = $pos + 3; } } elseif (($pos == $first && self::search($st, $pos+1, 1, array('M', 'N', 'L', 'W'))) || substr($st, $pos+1, 1) == 'Z' ) { $pri = $pri . 'S'; $sec = $sec . 'X'; if (substr($st, $pos+1, 1) == 'Z') { $pos = $pos + 2; } else { $pos++; } } elseif (substr($st, $pos, 2) == 'SC') { if (substr($st, $pos+2, 1) == 'H') { if (self::search($st, $pos+3, 2, array('OO', 'ER', 'EN', 'UY', 'ED', 'EM'))) { if (self::search($st, $pos+3, 2, array('ER', 'EN'))) { $pri = $pri . 'X'; $sec = $sec . 'SK'; $pos = $pos + 3; } else { $pri = $pri . 'SK'; $sec = $sec . 'SK'; $pos = $pos + 3; } } else { if ($pos == $first && self::search($st, $first+3, 1, array('A', 'E', 'I', 'O', U, Y), false && substr($st, $first+3, 1) != 'W') ) { $pri = $pri . 'X'; $sec = $sec . 'S'; $pos = $pos + 3; } else { $pri = $pri . 'X'; $sec = $sec . 'X'; $pos = $pos + 3; } } } elseif (self::search($st, $pos+2, 1, array('I', 'E', 'Y'))) { $pri = $pri . 'S'; $sec = $sec . 'S'; $pos = $pos + 3; } else { $pri = $pri . 'SK'; $sec = $sec . 'SK'; $pos = $pos + 3; } } elseif ($pos == $last && self::search($st, $pos-2, 2, array('AI', 'OI'))) { $sec = $sec . 'S'; $pos++; } else { $pri = $pri . 'S'; $sec = $sec . 'S'; if (self::search($st, $pos+1, 1, array('S', 'Z'))) { $pos = $pos + 2; } else { $pos++; } } break; case 'T': if (substr($st, $pos, 4) == 'TION') { $pri = $pri . 'X'; $sec = $sec . 'X'; $pos = $pos + 3; } elseif (self::search($st, $pos, 3, array('TIA', 'TCH'))) { $pri = $pri . 'X'; $sec = $sec . 'X'; $pos = $pos + 3; } elseif (substr($st, $pos, 2) == 'TH' || substr($st, $pos, 3) == 'TTH') { if (self::search($st, $pos+2, 2, array('OM', 'AM')) || self::search($st, $first, 4, array('VON ', 'VAN ')) || substr($st, $first, 3) == 'SCH' ) { $pri = $pri . 'T'; $sec = $sec . 'T'; $pos = $pos + 2; } else { $pri = $pri . 'O'; $sec = $sec . 'T'; $pos = $pos + 2; } } elseif (self::search($st, $pos+1, 1, array('T', 'D'))) { $pri = $pri . 'T'; $sec = $sec . 'T'; $pos = $pos + 2; } else { $pri = $pri . 'T'; $sec = $sec . 'T'; $pos = $pos++; } break; case 'V': if (substr($st, $pos+1, 1) == 'V') { $pri = $pri . 'F'; $sec = $sec . 'F'; $pos = $pos + 2; } else { $pri = $pri . 'F'; $sec = $sec . 'F'; $pos = $pos++; } break; case 'W': $tmp = substr($st, $pos+1, 1); $tmp2 = substr($st, $pos-1, 1); $tmp3 = substr($st, $pos-1, 5); if (substr($st, $pos, 2) == 'WR') { $pri = $pri . 'R'; $sec = $pri . 'R'; $pos = $pos + 2; } elseif ($pos == $first && ($tmp == 'A' || $tmp == 'E' || $tmp == 'I' || $tmp == 'O' || $tmp == 'U' || $tmp == 'Y' || substr($st, $pos, 2) == 'WH')) { $tmp = substr($st, $pos+1, 1); if ($tmp == 'A' || $tmp == 'E' || $tmp == 'I' || $tmp == 'O' || $tmp == 'U' || $tmp == 'Y') { $pri = $pri . 'A'; $sec = $sec . 'F'; $pos++; } else { $pri = $pri . 'A'; $sec = $sec . 'A'; $pos++; } } elseif (($pos == $last && ($tmp2 == 'A' || $tmp2 == 'E' || $tmp2 == 'I' || $tmp2 == 'O' || $tmp2 == 'U' || $tmp2 == 'Y')) || $tmp3 == 'EWSKI' || $tmp3 == 'EWSKY' || $tmp3 == 'OWSKI' || $tmp3 == 'OWSKY' || substr($st, $first, 3) == 'SCH') { $sec = $sec . 'F'; $pos++; } elseif (substr($st, $pos, 4) == 'WICZ' || substr($st, $pos, 4) == 'WITZ') { $pri = $pri . 'TS'; $sec = $sec . 'FX'; $pos = $pos + 4; } else { $pos++; } break; case 'X': if (($pos != $last && (substr($st, $pos-3, 3) != 'IAU' || substr($st, $pos-3, 3) != 'EAU')) || (substr($st, $pos-2, 2) != 'AU' || substr($st, $pos-2, 2) != 'OU') ) { $pri = $pri . 'KS'; $sec = $sec . 'KS'; } if (substr($st, $pos+1, 1) == 'C' || substr($st, $pos+1, 1) == 'X') { $pos = $pos + 2; } else { $pos++; } break; case 'Z': if (substr($st, $pos+1, 1) == 'H') { $pri = $pri . 'J'; $sec = $sec . 'J'; $pos++; } elseif ((substr($st, $pos+1, 3) == 'ZO' || substr($st, $pos+1, 3) == 'ZI' || substr($st, $pos+1, 3) == 'ZA') || ($isSlavoGermanic == 1 && $pos > $first && substr($st, $pos-1, 1) != 'T') ) { $pri = $pri . 'S'; $sec = $sec . 'TS'; } else { $pri = $pri . 'S'; $sec = $sec . 'S'; } if (substr($st, $pos+1, 1) == 'Z') { $pos = $pos+2; } else { $pos++; } break; default: $pos++; break; } if ($pos == $prevpos) { $pos++; } } if ($pri != $sec) { return $pri . ';' . $sec; } return $pri; } }