[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Парсер выдает в тексте "крякозябры"
complex
Парсер fb2 файла.

<?php

class
fictionbook{
var $book;
var $table_of_content = array();
var $book_info = array();

function book_load ($file){
$this->book = simplexml_load_file ($file);
$this->title_info();
}
function title_info (){
$title_info = 'title-info';
foreach ($this->book->description->$title_info->children() as $key=>$children){
switch ($key){
case 'genre':
$this->book_info['genre'][] = $genre_table_ru[(string) $children]; break;
case 'book-title':
$this->book_info['book-title'] = $children; break;
case 'author': //Автор(ы) произведения
$last_name = 'last-name';
$first_name = 'first-name';
$middle_name = 'middle-name';
$home_page = 'home-page';
$this->book_info['author'][] = array ( 'first-name'=>$children->$first_name,
'middle-name'=>$children->$middle_name,
'last-name'=>$children->$last_name,
'home-page'=>$children->$home_page,
'email'=>$children->email);
break;
case 'annotation':
$this->book_info['annotation'] = $children->asXML(); break;
case 'coverpage':
$this->book_info['coverpage'] = $children->image; break;
case 'date': // хранит дату создания документа.
$this->book_info['date'] = $children; break;
case 'translator': //Переводчик(и)
$last_name = 'last-name';
$first_name = 'first-name';
$middle_name = 'middle-name';
$home_page = 'home-page';
$this->book_info['translator'][] = array ( 'first-name'=>$children->$first_name,
'middle-name'=>$children->$middle_name,
'last-name'=>$children->$last_name,
'home-page'=>$children->$home_page,
'email'=>$children->email);
break;
case 'lang': //Язык книги
$this->book_info['lang'] = $children; break;
case 'year': // год издания книги.
$this->book_info['year'] = $children; break;

}
}

$this->table_of_content = $this->table_of_content();
}

// Выводит title в тексте
function table_of_content($book='false'){ //Надо было как-то отметить, что в начале читать с самого начала, при этом не задавая это явно в методе.
if (!empty($this->table_of_content)){return $this->table_of_content;} //Проверка на наличие
if ($book == 'false'){$book = $this->book->body;}
foreach ($book as $key=>$body){
if (isset($body->title)){
$title = $this->__clear_string($body->title->asXML());
if (!empty($title)){
//echo '<div'.$i.'>'.$title.'</div'.$i.'> //';
$title_array[] = $title;
}
}

$title_array_temp = $this->table_of_content($body->section);
if (!empty($title_array_temp)){$title_array[] = $title_array_temp;}
}

return $title_array;
}
function content($book='false', $i=-1){
if ($book == 'false'){$book = $this->book->body;}
++$i;
foreach ($book->children() as $key=>$body){
switch ($key){
case 'title':
if ($i == 0){$i=1;}
$title = $this->__clear_string($body->asXML());
echo '
<a name="'
.$title.'"><h'.$i.'>'.$title.'</h'.$i.'></a> ';
break;
case 'section':
$this->content($body, $i);
break;
case 'epigraph':
echo '<div class="epigraph">'.$this->__clear_string($body->asXML()).'</div>';
break;
default:
echo $this->__clear_string($body->asXML(), false);
}
}
}


function print_table_of_content($table = false){
if (!$table){$table = $this->table_of_content;
}
echo '<ul>';
foreach ($table as $row){
if (is_array($row)){
$this->print_table_of_content($row);
}else{
echo '<li><a href="#'.$row.'">'.$row.'</a></li> ';
}
}

echo '</ul> ';
}

private function __clear_string ($string, $p = true){
$string = preg_replace('/\<title\>|\<\/title\>/im', '', $string);
$string = preg_replace('/\s+/m', " ", $string);
$string = preg_replace('/^\s+|\s+$/', '', $string);
if ($p)
{$string = preg_replace('/\<p\>|\<\/p\>/im','', $string);
}

return $string;
}
}

$book = new fictionbook;
$book ->book_load($_GET['reader']."book.fb2");// загрузка книги
//echo '<pre>';

$book->print_table_of_content();
$book->content();
?>


Проблема в следующем: при выводе текста на страницу не правильно отображаются заглавная буква "Р" и пробел если он лишний (см. картинку ниже)

user posted image


решение проблемы не представляю. Может у кого на форуме есть идеи по этому поводу.

И второй вопрос. Делаю сайт на cms. Для уменьшения нагрузки на сервер файлы fb2 размещаются в файлах, а не в базе данных. Если с пагинацией из базы кое-как разобрался, то как прикрутить пагинацию к скрипту выше не представляю. Конечно изучение PHP мне должно помочь, но так сложилось, что время не терпит. Если у кого есть возможность и знания, чтобы помочь, то помогите пожалуйста.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.