Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.04.2012, 18:08
Новичок на форуме
Отправить личное сообщение для StelZ Посмотреть профиль Найти все сообщения от StelZ
 
Регистрация: 19.04.2012
Сообщений: 8

русские буквы в шифре Атбаш
данный скрипт должен переводить букву на противоположную в алфавите(а->я, б->ю и т.д.), но работает это только для английского алфавита. как сделать, чтобы работало с русским?

Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<title>Шифр Атбаш</title>
</head>
<td>&nbspШифр Атбаш</td>
<body>
<script language="JavaScript">
function atbash(str) {
var ret = '';
for (i=0;i<str.length;i++) {
ret += String.fromCharCode( -  str[i].toUpperCase().charCodeAt(0));
}
return ret;
}
function solve(str) {
document.getElementById('atbash').innerHTML = atbash(str);
}
</script>
<table>
<tbody>
<td><input type="text" onkeyup="solve(this.value);" /></td>
<td id="atbash">&nbsp;</td>
</tbody>
</table>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 19.04.2012, 19:01
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Этот код вообще нерабочий, в JavaScript строки в юникоде, код буквы «а» 1072, какой символ вы ожидаете получить от кода -1072?

Тут либо словарь замен составлять:
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>…</title>
	<style>
	</style>
</head>
<body>
	<input id="source-text" type="text">
	<input id="encoded-text" type="text">
	<script>
		var source = document.getElementById("source-text"),
			encoded = document.getElementById("encoded-text"),
			replacements = {
				"А": "Я",
				"Б": "Э",
				"В": "Ю",
				"Г": "Ь",
				"Д": "Ы",
				"Е": "Ъ",
				"Ё": "Щ",
				"Ж": "Ш",
				"З": "Ч",
				"И": "Ц",
				"Й": "Х",
				"К": "Ф",
				"Л": "У",
				"М": "Т",
				"Н": "С",
				"О": "Р",
				"П": "П",
				"Р": "О",
				"С": "Н",
				"Т": "М",
				"У": "Л",
				"Ф": "К",
				"Х": "Й",
				"Ц": "И",
				"Ч": "З",
				"Ш": "Ж",
				"Щ": "Ё",
				"Ъ": "Е",
				"Ы": "Д",
				"Ь": "Г",
				"Э": "В",
				"Ю": "Б",
				"Я": "А"
			};
		source.onkeyup = function encode() {
			encoded.value = source.value.replace(/[а-яА-ЯёЁ]/g, function (letter) {
				return replacements[letter.toUpperCase()];
			});
		};
	</script>
</body>
</html>


либо массив букв и заменять по следующему правилу:
Сообщение от http://ru.wikipedia.org/wiki/Атбаш
Правило шифрования состоит в замене «i»-й буквы алфавита буквой с номером «n» − «i» + 1, где «n» — число букв в алфавите.
Ответить с цитированием
  #3 (permalink)  
Старый 19.04.2012, 20:02
Новичок на форуме
Отправить личное сообщение для StelZ Посмотреть профиль Найти все сообщения от StelZ
 
Регистрация: 19.04.2012
Сообщений: 8

моя ошибка, пропустил число, с ним всё работает отлично:
ret += String.fromCharCode(155 - str[i].toUpperCase().charCodeAt(0));

странно, на чистой html странице ваш код не работает. сменил кодировку на windows-1251 и всё заработало. не потому ли, что utf-8 не поддерживает русский?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать, чтобы русские буквы не вводились в определенные поля формы? yachainik Общие вопросы Javascript 6 13.02.2017 16:43
Русские буквы возвращает корякулями Sprat Общие вопросы Javascript 1 19.11.2011 16:05
UTF коды русских букв > простые русские буквы gizmomy Общие вопросы Javascript 6 25.05.2010 09:49
Русские буквы квадратиками thunder2 Библиотеки/Тулкиты/Фреймворки 3 25.12.2009 00:10
русские буквы в графиках js charts Melichron Элементы интерфейса 22 11.09.2009 18:41