2009-02-25 4 views
3

У нас есть внешний .js-файл, который мы хотим включить в несколько разных страниц. Файл содержит код для сортировки таблицы на стороне клиента и использует символы ▲ и ▼ в сценарии, чтобы указать, какой столбец отсортирован и в каком направлении.Javascript encoding question

Сценарий изначально был написан для страницы ASP.Net, чтобы разгрузить некоторую работу сортировки с сервера на клиент (запретить сортировку postbacks при включенном javascript). В этом случае кодировка почти всегда является UTF-8, и в этом контексте она отлично работает.

Однако у нас также есть несколько старых классических страниц ASP, где мы хотим включить скрипт. Для этих страниц кодирование является скорее мешаниной в зависимости от того, кто написал страницу, когда и какой инструмент они использовали (блокнот, vs6, vs2005, другой помощник html). Часто на странице не указывается кодировка, поэтому для браузера нужно выбирать, но для этого нет жесткого правила, которое я могу видеть.

Проблема в том, что если используется другая (не UTF8) кодировка, символы ▼ и ▲ будут отображаться неправильно. Вместо этого я попытался использовать html-сущности, но не смог заставить их хорошо работать с javascript.

Как настроить скрипт для различных возможных кодировок так, чтобы «специальные» символы всегда отображались правильно? Существуют ли разные символы, которые я мог бы использовать, или трюк, который я пропустил, чтобы заставить html-объекты работать с javascript?

Вот фрагмент кода, где используются символы:

// get sort direction, arrow 
var dir = 1; 
if (self.innerHTML.indexOf(" ▲") > -1)   
    dir = -1; 
var arrow = (dir == 1)?" ▲":" ▼"; 

// SORT -- function that actually sorts- not relevant to the question 
if (!SimpleTableSort(t.id, self.cellIndex, dir, sortType)) return; 

//remove all arrows 
for (var c = 0,cl=t.rows[0].cells.length;c<cl;c+=1) 
{ 
    var cell = t.rows[0].cells[c]; 
    cell.innerHTML = cell.innerHTML.replace(" ▲", "").replace(" ▼", ""); 
} 

// set new arrow 
self.innerHTML += arrow; 

Для любознательных, кодовые точки я в конечном итоге, используя с принятым ответом были \ u25B4 и \ u25BC.

ответ

6

Вы хотите, чтобы Javascript Unicode удалялся i.e. "\ uxxxx", где "xxxx" является кодовой точкой Юникода для символа. Я считаю, что «\ u25B2» и «\ u25BC» - это те, которые вам нужны.

+0

Спасибо, что сделал. Для любопытных, коды, о которых идет речь, где \ u25B4 и \ u25BC –

7

Кодирование файла JavaScript зависит от кодировки HTML-страницы, в которую она встроена. Если у вас есть JavaScript-файл UTF-8 и HTML-страница ISO-8859-1, JavaScript интерпретируется как ISO-8859-1.

При загрузке JavaScript из как внешнего файла можно указать кодировку JavaScript:

<script type="text/javascript" charset="UTF-8" src="externalJS.js"></script> 

Во всяком случае, лучший вариант, чтобы сохранить все файлы, относящиеся к WebProject в одной кодировке, UTF-8 рекомендуемые.

1

Я проголосовал за обоих. Я думаю, что оба ответа вместе взяты будут вашим лучшим выбором.

Возможно, вам придется писать сценарий дважды, вставляя часть для UTF-8 и вставляя часть для не UTF-8. Это больше проблем, и может не работать все время, STILL.

Кому-то нужно разработать стандарты для ваших разработчиков. Если вы все напишете, по крайней мере, с той же кодировкой, это сделает вещи намного легче для вас в будущем.

+0

Вам не нужны два разных сценария. Подход Javascript Unicode escape работает независимо от того, загружена ли страница Javascript, UTF-8 или нет. Я не был на 100% уверен, что это так, поэтому я тестировал в FF3 и IE7 перед отправкой своего ответа. – andynormancx

+0

Но я бы согласился, что исправление страниц так, что они все UTF-8 - лучшее долгосрочное решение. – andynormancx