best-of-best.narod.ru   fb2

В начале html - кода файла fb2 (расширение: *.fb2) стоит: <?xml version="1.0" encoding="windows-1251"?> где кодировка "encoding" может быть другой.

Если файл в кодировке U T F - 8, то откройте этот файл с помощью блокнота, замените кодировку на windows-1252 (или просто выбросьте эту строчку) и сохраните его в тот же самый файл в кодировке ANSI, дальше работаем с этим файлом.

Весь текст заключён внутри тега <FictionBook . . .></FictionBook> Этот тег игнорируется браузером. Здесь и далее говоря "игнорируется браузером" имеется в виду, что любой текст заключённый внутри этого тега в html - коде будет отображаться браузером. Например: <tt>Это будет видно</tt> <title>Это не будет видно</title>.

Внутри предыдущего тега стоит тег "description", который нам не интересен, в нём название книги, автор, и так далее, тег "body", и один или несколько тегов "binary" с картинками в кодировке Base64.

Перед началом работы с текстом следует выбросить всё, что стоит после тега "body" (здесь x это html - код) x=x.split('<\/body>')[0]

Тег <body></body> это тег в котором находится сама книга. Тег игнорируется браузером. Его менять ни на что не надо.

Внутри тега "body" стоят теги <section></section> который игнорируется браузером. В каждом из этих тегов и находятся отдельные куски книги. Этот тег удобно заменить тегом "fieldset", который создаёт рамку вокруг каждого куска. Замену можно осуществить так.

x=x.replace(/<section>/gi,'<fieldset>')
x=x.replace(/<\/section>/gi,'</fieldset>')
или так
x=x.replace(/section/gi,'fieldset')

Ещё внутри тега "body" стоят теги <title></title> это тег заголовка сообщения, который браузером не отображается. Его удобно заменить на тег "h1". Перед закрывающим тегом следует поставить точку, так как в конце заголовка её не ставят!

x=x.replace(/<title>/gi,'<h1>')
x=x.replace(/<\/title>/gi,'.</h1>')

Ещё внутри тега "body" могут стоять теги <subtitle></subtitle> это тег подзаголовков, который браузером не отображается. Их удобно заменить на тег "h3".

x=x.replace(/<subtitle>/gi,'<h1>')
x=x.replace(/<\/subtitle>/gi,'</h1>')

Ещё внутри тега "body" стоят теги <emphasis></emphasis> это тег подчеркивания, который браузером не отображается. Его удобно заменить на тег "u". Перед закрывающим тегом следует поставить точку, так как в конце заголовка её не ставят!

x=x.replace(/<emphasis>/gi,'<u>')
x=x.replace(/<\/emphasis>/gi,'.</u>')

Ещё внутри тега "body" стоят непарные теги <empty-line/> это тег черты. Его удобно заменить на теги <ul><li></li></ul>.

x=x.replace(/<empty-line/>/gi,'<ul><li></li></ul>')




Если нужно не просто отобразить содержимое файла, а получить только нужнное из него, поступим следующим образом.

  1 Создадим переменную te_xt.

te_xt=''

  2 Выбросим всё, что стоит после тега "body"

x=x.split('<\/body>')[0]

  3 Заменим тег "emphasis" на тег "u"

x=x.replace(/emphasis/gi,'u')

  4 Заменим тег "empty-line" на "<dd>---"

x=x.replace(/<empty-line\/>/gi,'<dd>---')

  5 Создадим массив массив M_x из кусков файла, нарезанного по section.

M_x=x.split('<section>')

  6 Будем перебирать куски с первого до последнего (кусок с номером ноль пропускаем).

for(i=1; i<M_x.length; i++){//for
}//for

  7 В каждом куске создаём переменную ti_tle, принимающую значение тега title (если он есть),удаляем из него аналог "empty-line" "<dd>---", удаляем все теги "<[^>]+>", убираем перенос строк и проводим сложную чистку

if(M_x[i].split('<title>').length>1){
ti_tle=M_x[i].split('<title>')[1].split('</title>')[0]}
ti_tle=ti_tle.replace(/<dd>---/g,'')
ti_tle=ti_tle.replace(/<[^>]+>/g,'')
ti_tle=ti_tle.replace(/\r\n/g,' ')
ti_tle=ti_tle.replace(/      /g,' ')
ti_tle=ti_tle.replace(/     /g,' ')
ti_tle=ti_tle.replace(/    /g,' ')
ti_tle=ti_tle.replace(/   /g,' ')
ti_tle=ti_tle.replace(/  /g,' ')
ti_tle='@1@'+ti_tle+'@2@'
ti_tle=ti_tle.replace(/@1@ /g,'@1@').replace(/ @2@/g,'@2@')
ti_tle=ti_tle.replace(/@1@/g,'').replace(/@2@/g,'')

  8 Набираем переменную te_xt

te_xt+='<fieldset><h1>'+ti_tle+'.</h1>'+''+M_x[i]+'</fieldset>'

  9 Делаем в переменной te_xt замену лишних, появившихся точек

te_xt=te_xt.replace(/\.\./g,'.')
te_xt=te_xt.replace(/\?\./g,'?')
te_xt=te_xt.replace(/\!\./g,'!')

24.1.2011 00.00



Используются технологии uCoz