לתועלת הציבור, אני משתף כאן מקלדת איכותית ל-PHP.
נשמח אם חברי הפורום יוסיפו וישכללו את המקלדת.
ההקלדה רציפה, כמו כתיבת איש קשר, ובסיום סולמית.
בין שני אותיות על אותו מקש יש להקיש * (-כוכבית).
הקשת *** (-שלוש פעמים כוכבית) מוחקת את האות האחרונה שהוקשה.
להלן המקלדת:
function digitsToText($digits) {
$array_number = [
22222222, 2222222, 222222, 22222, 2222, 222, 22, 2,
33333333, 3333333, 333333, 33333, 3333, 333, 33, 3,
44444444, 4444444, 444444, 44444, 4444, 444, 44, 4,
55555555, 5555555, 555555, 55555, 5555, 555, 55, 5,
66666666, 6666666, 666666, 66666, 6666, 666, 66, 6,
777777777, 77777777, 7777777, 777777, 77777, 7777, 777, 77, 7,
88888888, 8888888, 888888, 88888, 8888, 888, 88, 8,
999999999, 99999999, 9999999, 999999, 99999, 9999, 999, 99, 9,
'00000000000000', '0000000000000', '000000000000', '00000000000', '0000000000',
'000000000', '00000000', '0000000', '000000', '00000', '0000', '000', '00', '0',
11111111111, 1111111111, 111111111, 11111111, 1111111, 111111, 11111, 1111, 111, 11, 1, '*'
];
$array_abc = [
"c", "b", "a", 2, 2, "ו", "ה", "ד",
"f", "e", "d", 3, 3, "ג", "ב", "א",
"i", "h", "g", 4, "ן", "נ", "ם", "מ",
"l", "k", "j", 5, "ל", "ך", "כ", "י",
"o", "n", "m", 6, 6, "ט", "ח", "ז",
"s", "r", "q", "p", 7, 7, "ת", "ש", "ר",
"v", "u", "t", 8, 8, "ק", "ץ", 'צ',
"z", "y", "x", "w", 9, "ף", "פ", "ע", 'ס',
">", "<", "#", "%", "$", "@", "&", "/", "=", "*", "-", "+", "0", " ",
"]", "[", ")", "(", ":", "!", "?", "'", 1, ",", ".", ""
];
$parts = explode('***', $digits);
if (count($parts) > 1) {
while (in_array('', $parts, true)) {
foreach ($parts as $index => $part) {
if ($part === '' && $index > 0) {
$prevIndex = $index - 1;
$prevPart = $parts[$prevIndex];
foreach ($array_number as $seq) {
if (str_ends_with($prevPart, strval($seq))) {
$parts[$prevIndex] = substr($prevPart, 0, -strlen($seq));
unset($parts[$index]);
$parts = array_values($parts);
break 2;
}
}
} elseif ($part === '' && $index === 0) {
unset($parts[$index]);
$parts = array_values($parts);
continue 2;
}
}
}
$lastPart = array_pop($parts);
foreach ($parts as &$part) {
foreach ($array_number as $seq) {
if (str_ends_with($part, strval($seq))) {
$part = substr($part, 0, -strlen($seq));
break;
}
}
}
$digits = implode('', $parts) . $lastPart;
}
$text = '';
while ($digits !== '') {
$matched = false;
foreach ($array_number as $index => $seq) {
$seqStr = strval($seq);
if (str_starts_with($digits, $seqStr)) {
$text .= $array_abc[$index];
$digits = substr($digits, strlen($seqStr));
$matched = true;
break;
}
}
if (!$matched) {
$text .= $digits[0];
$digits = substr($digits, 1);
}
}
return $text;
}
להלן דוגמה לשימוש במקלדת:
// דימוי מערך GET עם פרמטר digits
$_GET['digits'] = '77555522244099222555544';
// העברת הקלט מה-GET למשתנה
$digits = $_GET['digits'];
// קריאה לפונקציה והכנסת התוצאה למשתנה
$text = digitsToText($digits);
// הדפסת התוצאה
echo $text;
להלן מקרא המקלדת:
(1) 1 = .
(2) 11 = ,
(3) 111 = 1
(4) 1111 = '
(5) 11111 = ?
(6) 111111 = !
(7) 1111111 = :
(8) 11111111 = (
(9) 111111111 = )
(10) 1111111111 = [
(11) 11111111111 = ]
(1) 2 = ד
(2) 22 = ה
(3) 222 = ו
(4) 2222 = 2
(5) 22222 = 2
(6) 222222 = a
(7) 2222222 = b
(8) 22222222 = c
(1) 3 = א
(2) 33 = ב
(3) 333 = ג
(4) 3333 = 3
(5) 33333 = 3
(6) 333333 = d
(7) 3333333 = e
(8) 33333333 = f
(1) 4 = מ
(2) 44 = ם
(3) 444 = נ
(4) 4444 = ן
(5) 44444 = 4
(6) 444444 = g
(7) 4444444 = h
(8) 44444444 = i
(1) 5 = י
(2) 55 = כ
(3) 555 = ך
(4) 5555 = ל
(5) 55555 = 5
(6) 555555 = j
(7) 5555555 = k
(8) 55555555 = l
(1) 6 = ז
(2) 66 = ח
(3) 666 = ט
(4) 6666 = 6
(5) 66666 = 6
(6) 666666 = m
(7) 6666666 = n
(8) 66666666 = o
(1) 7 = ר
(2) 77 = ש
(3) 777 = ת
(4) 7777 = 7
(5) 77777 = 7
(6) 777777 = p
(7) 7777777 = q
(8) 77777777 = r
(9) 777777777 = s
(1) 8 = צ
(2) 88 = ץ
(3) 888 = ק
(4) 8888 = 8
(5) 88888 = 8
(6) 888888 = t
(7) 8888888 = u
(8) 88888888 = v
(1) 9 = ס
(2) 99 = ע
(3) 999 = פ
(4) 9999 = ף
(5) 99999 = 9
(6) 999999 = w
(7) 9999999 = x
(8) 99999999 = y
(9) 999999999 = z
(1) 0 =
(2) 00 = 0
(3) 000 = +
(4) 0000 = -
(5) 00000 = *
(6) 000000 = =
(7) 0000000 = /
(8) 00000000 = &
(9) 000000000 = @
(10) 0000000000 = $
(11) 00000000000 = %
(12) 000000000000 = #
(13) 0000000000000 = <
(14) 00000000000000 = >
(1) * =
כאמור, נשמח בכל שידרוג המקלדת לתועלת כלל הציבור.
תודה..