Source for file KeySwap.php
Documentation is available at KeySwap.php
* ----------------------------------------------------------------------
* Copyright (c) 2006-2013 Khaled Al-Sham'aa.
* ----------------------------------------------------------------------
* This program is open source product; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License (LGPL)
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/lgpl.txt>.
* ----------------------------------------------------------------------
* Class Name: Arabic Keyboard Swapping Language
* Original Author(s): Khaled Al-Sham'aa <khaled@ar-php.org>
* Purpose: Convert keyboard language programmatically (English - Arabic)
* ----------------------------------------------------------------------
* Arabic Keyboard Swapping Language
* PHP class to convert keyboard language between English and Arabic
* programmatically. This function can be helpful in dual language forms when
* users miss change keyboard language while they are entering data.
* If you wrote an Arabic sentence while your keyboard stays in English mode by
* mistake, you will get a non-sense English text on your PC screen. In that case
* you can use this class to make a kind of magic conversion to swap that odd text
* by original Arabic sentence you meant when you type on your keyboard.
* Please note that magic conversion in the opposite direction (if you type English
* sentences while your keyboard stays in Arabic mode) is also available in this
* class, but it is not reliable as much as previous case because in Arabic keyboard
* we have some keys provide a shortcut to type two chars in one click (those keys
* include: b, B, G and T).
* Well, we try in this class to come over this issue by suppose that user used
* optimum way by using shortcut keys when available instead of assemble chars using
* stand alone keys, but if (s)he does not then you may have some typo chars in
* include('./I18N/Arabic.php');
* $obj = new I18N_Arabic('KeySwap');
* $str = "Hpf lk hgkhs hglj'vtdkK Hpf hg`dk dldg,k f;gdjil Ygn ,p]hkdm ...";
* echo "<p><u><i>Before:</i></u><br />$str<br /><br />";
* $text = $obj->swap_ea($str);
* echo "<u><i>After:</i></u><br />$text<br /><br />";
* @author Khaled Al-Sham'aa <khaled@ar-php.org>
* @copyright 2006-2013 Khaled Al-Sham'aa
* @license LGPL <http://www.gnu.org/licenses/lgpl.txt>
* @link http://www.ar-php.org
// New in PHP V5.3: Namespaces
// namespace I18N\Arabic;
// $obj = new I18N\Arabic\KeySwap();
// $obj = new Arabic\KeySwap();
// use I18N\Arabic\KeySwap as KeySwap;
* This PHP class convert keyboard language programmatically (English - Arabic)
* @author Khaled Al-Sham'aa <khaled@ar-php.org>
* @copyright 2006-2013 Khaled Al-Sham'aa
* @license LGPL <http://www.gnu.org/licenses/lgpl.txt>
* @link http://www.ar-php.org
// First 12 chars replaced by 1 Byte in Arabic keyboard
// while rest replaced by 2 Bytes UTF8
private static $_swapEn = '{}DFL:"ZCV<>`qwertyuiop[]asdfghjkl;\'zxcvnm,./~QWERYIOPASHJKXN?M';
private static $_swapAr = '<>][/:"~}{,.ذضصثقفغعهخحجدشسيبلاتنمكطئءؤرىةوزظًٌَُّإ÷×؛ٍِأـ،ْآ؟’';
private static $_swapFr = '²azertyuiop^$qsdfghjklmù*<wxcvn,;:!²1234567890°+AZERYIOP¨£QSDFHJKLM%µ<WXCVN?./§';
private static $_swapArAzerty = '>ضصثقفغعهخحجدشسيبلاتنمكطذ\\ئءؤرىةوزظ>&é"\'(-è_çà)=ضصثقغهخحجدشسيباتنمكطذ\\ئءؤرىةوزظ';
private $_transliteration = array();
* Loads initialize values
public function __construct()
foreach ($xml->transliteration->item as $item) {
$this->_transliteration["$index"] = (string) $item;
* Make conversion to swap that odd Arabic text by original English sentence
* you meant when you type on your keyboard (if keyboard language was
* @param string $text Odd Arabic string
* @return string Normal English string
* @author Khaled Al-Sham'aa
public static function swapAe($text)
for ($i= 0; $i< $max; $i++ ) {
$pos = strpos(self::$_swapAr, $text[$i]);
$pos2 = strpos(self::$_swapAr, $text[$i]. $text[$i+ 1]);
$adjPos = ($pos - 12)/ 2 + 12;
$output .= substr(self::$_swapEn, $adjPos, 1);
* Make conversion to swap that odd English text by original Arabic sentence
* you meant when you type on your keyboard (if keyboard language was
* @param string $text Odd English string
* @return string Normal Arabic string
* @author Khaled Al-Sham'aa
public static function swapEa($text)
$text = stripslashes($text);
for ($i= 0; $i< $max; $i++ ) {
$pos = strpos(self::$_swapEn, $text[$i]);
$adjPos = ($pos - 12)* 2 + 12;
$output .= substr(self::$_swapAr, $adjPos, $len);
|