Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Перекодировка текста (https://javascript.ru/forum/misc/2638-perekodirovka-teksta.html)

Стихотворец 26.01.2009 16:50

Перекодировка текста
 
У меня примерно такой скрипт...
// Функция перекодировки текста
function recode(str)
{
	// Определение длины строки
	len = str.length;
	for (ich=0; ich <= len-1; ich++)
	{
		ch = str.substr(ich,1);
		// Определение замен
		if (ch == "А"){document.write("&lt;#1041;");}
		...
		if (ch == "я"){document.write("&lt;1103;");}
	}
}

По поводу его работы у меня возникают некоторые вопросы:
1. Как сделать, чтобы можно было обрабатывать не просто строку, а целиком текст?
2. Как установить этот скрипт на нажатие кнопки?
3. Как сделать, чтобы обрабатывался текст, который я вставлю в <textarea> непосредственно на странице?
Я пробовал сделать это так:
// Выполнение при нажатии кнопки
function textit()
{
	document.write("&lt;html>&lt;head>&lt;meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>&lt;title>" + tit + "&lt;/title>&lt;/head>&lt;body>&lt;form method=get action=/cgi-bin/proba>&lt;center>&lt;table>&lt;tr>&lt;td>&lt;textarea cols='100' rows='40'>&lt;script>recode('" + document.form.textarea + "');&lt;/script>&lt;/textarea>&lt;/td>&lt;/tr>&lt;/table>&lt;table width='100'>&lt;tr>&lt;td>&lt;input type='button' value='Перевести' onClick='textit();' size=2>&lt;/td>&lt;/tr>&lt;/table>&lt;/center>&lt;/form>&lt;/body>&lt;/html>");
}

Но понял, что таким образом я не добьюсь желаемого результата, потому что функция обрабатывается так:
<script>
	recode('Строка 1');
	recode('Строка 2');
	recode('Строка 3');
</script>

То есть при явном указании обрабатываемого текста!!!

Андрей Параничев 26.01.2009 17:56

1. Бессмысленный вопрос.
2. Скрипт придется переписать, потому что сейчас, с использованием document.write, вы не сможете установить его, как обработчик. Потому что после полной загрузки страницы, вызов document.write перезаписывает весь вывод страницы.
3. С этим есть сложности, потому что не все браузеры поддерживают такое специфическое событие, ведь вставить можно не только комбинацией ctrl+v, которую можно отловить, но и через контекстное меню.

И, кроме всего прочего, чего вы хотите добиться этим скриптом? Ведь введенный в textarea текст будет отображаться в той кодировке, в который отображается страница, а вставленные через JavaScript спец символы, вроде &#xxxx;, будут отображаться текстовой записью, а не символом другой кодировки. Может ваша проблема имеет более подходящие решения, например серверными силами?

Kolyaj 26.01.2009 18:53

Цитата:

Сообщение от Андрей Параничев
Ведь введенный в textarea текст будет отображаться в той кодировке, в который отображается страница

Всегда в юникоде будут.

x-yuri 27.01.2009 06:31

2. нужно вместо document.write использовать конкатенацию строк(+), а результат вставлять куда надо. А обработчик назначить через атрибут onclick кнопки либо после загрузки документа
3. получить доступ к содержимому textarea можно следующим образом: document.getElementById('textAreaId').value

Стихотворец 27.01.2009 07:56

Цитата:

Сообщение от Андрей Параничев (Сообщение 11439)
1. Бессмысленный вопрос.
2. Скрипт придется переписать, потому что сейчас, с использованием document.write, вы не сможете установить его, как обработчик. Потому что после полной загрузки страницы, вызов document.write перезаписывает весь вывод страницы.
3. С этим есть сложности, потому что не все браузеры поддерживают такое специфическое событие, ведь вставить можно не только комбинацией ctrl+v, которую можно отловить, но и через контекстное меню.

И, кроме всего прочего, чего вы хотите добиться этим скриптом? Ведь введенный в textarea текст будет отображаться в той кодировке, в который отображается страница, а вставленные через JavaScript спец символы, вроде &#xxxx;, будут отображаться текстовой записью, а не символом другой кодировки. Может ваша проблема имеет более подходящие решения, например серверными силами?

А можно поподробнее? Дело в том что имеется текст примерно следующего содержания:
—І® ¦Ґ ў»шҐ ў±Ґг® ­  ±ўҐтҐ?‹ѕЎ®ўј?’®«јЄ® Ј®р»! :
)- - - - - - - - - - -‚ —Ђ’› Ќ… ‡‚Ђ’њ!†€‡Ќ€ € „…Ќњѓ€ Ќ… Љ‹џЌ—€’њ!‚‘…
ђЂ‚ЌЋ Ќ… „ЂЊ!ЉЌЋЏЋ—Ќ›Њ ‘…Љ‘ЋЊ Ќ… ‡ЂЌ€ЊЂћ‘њ!
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~—І® ІҐбҐ Ї®д рЁІј?Њ®¦ҐІ ІҐµ ¦ір ўлҐ©?—І®
і­®сїІ ­  ѕЈЏҐ±нЁ °і±±кЁµ Ї®лҐ©?Њ®¦ҐІ ±ЁнЁ© Іім ­?Њ®¦ҐІ їЎл®нЁ ¶ўҐІ
?„«ї ¬Ґнї ­ЁчҐг® ­Ґв®§м®¦н®г® ­ҐІ!—І® ІҐбҐ Ї®д рЁІј,—Ґ«®вҐЄ ¬®©
¤®р®г®©?Љ Є ±і¤јЎі Ў« г®д рЁІј,—І® ±ўҐл  ¬Ґнї ± І®б®©?
„«ї ¬Ґнї ­ЁчҐг® ­Ґв®§м®¦н®г® ­ҐІ!!!  t  „ «јёҐ. аЏ®®Ўщ Іј±ї.

Ни один браузер (IE, Mozilla, Opera и т. д.) не может понять эту белиберду. Можете сами попробовать :) мне бы хотелось привести этот текст в читабельный вид!

x-yuri 27.01.2009 08:02

а javascript при чем? Штирлиц в студию
а что за текст? А то только часть удалось прочитать ;-)

Стихотворец 28.01.2009 17:22

Цитата:

Сообщение от x-yuri (Сообщение 11482)
а javascript при чем? Штирлиц в студию
а что за текст? А то только часть удалось прочитать ;-)

Просто мне хотелось бы довести до ума свою задумку :) и получше узнать что такое JavaScript.
Я только не совсем понял, где именно вставлять document.getElementById('textAreaId').value и как с ним работать.

А за Штирлица спасибо, пригодится в хозяйстве ;)

Кстати, текст я из бинарника вынул :D
Если заинтересовало, могу весь файл дать ;)

x-yuri 28.01.2009 17:43

Цитата:

Если заинтересовало, могу весь файл дать
да не, это я так

Цитата:

Просто мне хотелось бы довести до ума свою задумку и получше узнать что такое JavaScript.
Я только не совсем понял, где именно вставлять document.getElementById('textAreaId').value и как с ним работать.
var a = document.getElementById('textAreaId').value;

записывает в a содержимое textarea (textAreaId - id элемента textarea)
document.getElementById('textAreaId').value = 'текст';

изменяет содержимое textarea
а вообще почитай статьи

Стихотворец 29.01.2009 13:30

Одно дело прочитать статью и совсем другое - что-то из нее понять. Я перечитал уже все учебники, какие смог найти. Но обычно там все ограничивается:
document.open();
document.write('Hello, world!');
document.close();


или еще проще:

alert("Hello, world!")


Проще написать собственный скриптовый язык, состоящий из набора русских слов :)

Андрей Параничев 29.01.2009 15:45

Объясните мне, чем вам поможет код из первого сообщения (где нормальные буквы заменяются на символы unicode-последовательности) в перекодировке неизвестного текста, который весь в закорючках?


Часовой пояс GMT +3, время: 14:42.