нашел скрипт транслит но незнаю как сделать чтоб переводил помогите спс PHP: <script type="text/javascript"> var latin=("a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-;-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z").split("-") var ciril=("а-б-ц-д-е-ф-г-х-и-й-к-л-м-н-о-п-э-р-с-т-у-в-ш-ы-ч-з-я-А-Б-Ц-Д-Е-Ф-Г-Х-И-Й-К-Л-М-Н-О-П-Э-Р-С-Т-У-В-Ш-Ы-Ч-З").split("-") //(c) subONE [razgona.net] function translit() { var omg=document.selection.createRange() var omg1=omg.text var xy=0 for(xy=0; xy<=(latin.length-1); xy++) { var latin1="/"+latin[xy]+"/g" omg1=omg1.replace(eval(latin1), ciril[xy]) } omg.text=omg1 } </script> <textarea name="Message" id="Message" cols="30" rows="5" class="text"></textarea><br> <input type="button" value="Транслит" onclick="translit()">
да и как сделать из вот это <a href="javascript:t.go(0)" title="Перевести в кириллицу">Кириллица</a> кнопку?
Code: <script> var rusChars = new Array('а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ч','ц','ш','щ','э','ю','\я','ы','ъ','ь', ' ', '\'', '\"', '\#', '\$', '\%', '\&', '\*', '\,', '\:', '\;', '\<', '\>', '\?', '\[', '\]', '\^', '\{', '\}', '\|', '\!', '\@', '\(', '\)', '\-', '\=', '\+', '\/', '\\'); var transChars = new Array('a','b','v','g','d','e','jo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','ch','c','sh','csh','e','ju','ja','y','', '', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''); var from = ""; function convert2EN() { from = document.getElementById("Message").value; from = from.toLowerCase(); var to = ""; var len = from.length; var character, isRus; for(var i=0; i < len; i++) { character = from.charAt(i,1); isRus = false; for(var j=0; j < rusChars.length; j++) { if(character == rusChars[j]) { isRus = true; break; } } to += (isRus) ? transChars[j] : character; } document.form1.Message.value = to; } </script> <FORM NAME="form1"> <textarea name="Message" id="Message" cols="30" rows="5" class="text"></textarea><br> <input type="button" value="Транслит" onclick="convert2EN()"> </FORM>
использовал конвертер в транслит, немного улучшил: в частности там нет необходимости перебирать весь массив с русскими символами, чтобы узнать русский у нас символ или нет. достаточно использовать indexOf
Конвертер транслита на яваскрипт ваще вот лучший пример: PHP: <script type='text/javascript'> function translit(id) { var field = document.getElementById(id); var from = field.value.toLowerCase(); var rusChars = new Array('а','б','в','г','д','е','ё','ж','з','и','й', 'к','л','м','н','о','п','р','с','т','у','ф','х','ч ','ц','ш','щ','э','ю','\я','ы','ъ','ь', ' ', '\'', '\"', '\#', '\$', '\%', '\&', '\*', '\,', '\:', '\;', '\<', '\>', '\?', '\[', '\]', '\^', '\{', '\}', '\|', '\!', '\@', '\(', '\)', '\-', '\=', '\+', '\/', '\\'); var transChars = new Array('a','b','v','g','d','e','jo','zh','z','i','j ','k','l','m','n','o','p','r','s','t','u','f','h', 'ch','c','sh','csh','e','ju','ja','y','_', '_', '_', '_', '_', '_', '_', '_', '_', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '_', '_', '_', '_', '_'); var to = ''; var len = from.length; var rlen = rusChars.length; var character, isRus; for(var i = 0; i < len; i++) { var character = from.charAt(i,1); var foundIndex = rusChars.indexOf(character); to += (foundIndex != -1) ? transChars[foundIndex] : character; } field.value = to; } </script> <input type='text' id='message' /><input type='button' onclick='translit("message")' value='← to translite' /> Файл должен быть в ansi (windows-1251) кодировке.
charAt принимает один параметр Метод Array.prototype.indexOf не является стандартным и его нет как минимум в ie hint: Code: { 'а': 'a', 'б': 'b', 'в': 'v' /* etc */ }
чет я не понимаю.. charsArray - это объект. как получить его длину? и как проверить наличие в нём текущей буквы? (в смысле есть ли способ, типа indexOf)? PHP: function translit() { var charsArray = { 'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'jo', 'ж':'zh', 'з':'z', 'и':'i', 'й':'j', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o', 'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'h', 'ч':'ch', 'ц':'c', 'ш':'sh', 'щ':'csh', 'э':'e', 'ю':'ju', '\я':'ja', 'ы':'y', 'ъ':'', 'ь':'\'', ' ':'_', '\'':'', '\"':'', '\#':'', '\$':'', '\%':'', '\&':'', '\*':'', '\,':'', '\:':'', '\;':'', '\<':'', '\>':'', '\?':'', '\[':'', '\]':'', '\^':'', '\{':'', '\}':'', '\|':'', '\!':'', '\@':'', '\(':'', '\)':'', '\-':'_', '\=':'', '\+':'', '\/':'', '\\':'' }; var field = document.getElementById('message'); var from = field.value.toLowerCase(); var to = ''; var character; for(var i = 0; i < 61; i++) { var character = from.charAt(i); foundIndex = charsArray.indexOf(character); to += (foundIndex != -1)? charsArray[character] : character; } field.value = to; }
var x = new Array(); x[0] = "Строка"; x[1] = "Еще строка"; var l = x.length; // l равно 2 по поводу поиска без перебора здесь: http://habrahabr.ru/blogs/javascript/46787/
PHP: function translit(id) { var charsArray = { 'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'jo', 'ж':'zh', 'з':'z', 'и':'i', 'й':'j', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o', 'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'h', 'ч':'ch', 'ц':'c', 'ш':'sh', 'щ':'csh', 'э':'e', 'ю':'ju', '\я':'ja', 'ы':'y', 'ъ':'', 'ь':'\'', ' ':'_', '\'':'', '\"':'', '\#':'', '\$':'', '\%':'', '\&':'', '\*':'', '\,':'', '\:':'', '\;':'', '\<':'', '\>':'', '\?':'', '\[':'', '\]':'', '\^':'', '\{':'', '\}':'', '\|':'', '\!':'', '\@':'', '\(':'', '\)':'', '\-':'_', '\=':'', '\+':'', '\/':'', '\\':'' }; var character; var field = document.getElementById(id); var from = field.value.toLowerCase(); field.value = ''; for(var i = 0; i < 61; i++) { character = from.charAt(i); field.value += (character in charsArray)? charsArray[character] : character; } } Вот. здесь можно чета улучшить ещё?
Конечно. Code: for(var i = 0; i < 61; i++) Обрабатываются только первые 62 знака исходного текста. Всё, что после - нет. Code: '\'': '', '\"': '', '\#': '', '\$': '', '\%': '', '\&': '', '\*': '', '\,': '', '\:': '', '\;': '', '\<': '', '\>': '', '\?': '', '\[': '', '\]': '', '\^': '', '\{': '', '\}': '', '\|': '', '\!': '', '\@': '', '\(': '', '\)': '', '\-': '_', '\=': '', '\+': '', '\/': '', '\\': '' Экранирующий слэш нужен только в первом и последнем случаях. Зачем вообще удалять все эти символы - неясно. Code: var character; var field = document.getElementById(id); var from = field.value.toLowerCase(); field.value = ''; Лучше бы функции транслитерации только этим и заниматься, ей передали текст (и таблицу замен - опционально) - она вернула текст, не очищая там попутно левые поля, не заполняя их ничем, но это так, к слову. Code: character = from.charAt(i); Пусть Code: field.value += (character in charsArray) ? charsArray[character] : character; Можно было обойтись без этой проверки, немного развернув логику - проходить не по строке, а по самой таблице замен. (for..in)