2015-05-19 2 views
1

У меня есть простая форма, где вы можете загрузить HTML-файл, его структура выглядит следующим образом:Редактировать файл HTML с помощью PHP

<?xml version='1.0' encoding='utf-8'?> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="he" xml:lang="he" dir="rtl"> 

<head> 
    <title>test</title> 
    <link rel="stylesheet" href="../Styles/cssreset-min.css" type="text/css"/> 
    <link rel="stylesheet" href="../Styles/page_styles.css" type="text/css"/> 
    <link rel="stylesheet" href="../Styles/style.css" type="text/css"/> 
</head> 

<body id="start"> 

    <img src="../Images/cover.jpg" class="images" alt="Image 1"/> 

</body> 

</html> 

Я заинтересован в стороне сервера кодирования редактирования файла HTML , как загрузить его, найти тег img и заменить его тегом <svg> (например) и сохранить файл html с тем же именем и расширением. Я пробовал несколько раз, но, кажется, меня путают со всеми различными методами. Это решение должно быть совместимо с несколькими браузерами и не использовать какую-либо зависимость, если это возможно, например. Я попытался использовать RecursiveTreeIterator один раз, и моя хостинговая компания блокировала его от запуска.

Thanks

+2

Привет, что вам нужно это хороший HTML анализатор. –

+0

На стороне сервера нет браузера. HTML - это всего лишь текстовый файл, и на чисто техническом уровне он будет редактироваться, как и любой другой текстовый файл. Что отличает его, так это то, что текст форматируется определенным образом (надеюсь). Я представляю, что вы ищете, это какой-то парсер DOM, который может загружать HTML, изменять его и сохранять. – David

+1

Есть слишком много возможных ответов, или хорошие ответы будут слишком длинными для этого формата. Пожалуйста, добавьте детали, чтобы сузить набор ответов или изолировать проблему, на которую можно ответить в нескольких параграфах. Я бы предположил, что вы нашли форум для разработки (возможно, [reddit] (https://www.reddit.com/)?) выработать общие положения. Затем, когда у вас возникнут проблемы с кодированием, вернитесь в StackOverflow, и мы будем рады помочь. –

ответ

2

В общем:

Чтобы загрузить любой файл с локального затем обработать содержимое и сохранить результат вам нужен

1- загрузить файл на стороне сервера

2- обрабатывать содержание

3- сохранить результаты в стороне сервера и дать клиенту ссылку, чтобы загрузить его

так что вы можете создать новый файл (pars.php) и поместить этот код в нем, как вы его видите есть комментарии, чтобы объяснить вам каждый командную

код PHP является лишь простым примером, вы можете улучшить его

<html> 
<head> 
</head> 
<body> 
    <form class="public" action="<?php echo "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; ?>" method="POST" enctype="multipart/form-data"> 
    <p><label for="file">File Name:</label> <input type="file" name="file" id="file" /></p> 
    <br/> 
    <p><input type="submit" value="Parsing" name="sendData"/></p> 
    </form> 

</body> 
</html> 

<?php 
//test if the file is selected 
if(!isset($_POST['sendData'])) exit; 
//get file name 
$filename = $_FILES["file"]["name"]; 
//be sure this file is html file 
$ext = explode('.', $filename); 
if($ext[1] != 'html'){ 
    echo '<br>bad file type, it must be html file'; 
    exit; 
} 
//upload the file to temp area 
move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]); 
//read the file 
$file = @fopen($filename, 'r'); 
if($file === false){ 
    echo 'Error when reading the file'; 
    exit; 
} 
//reading line by line 
$output =''; 
while (($line = fgets($file)) !== FALSE) { 
    $output .= str_replace('<img', '<svg', $line); 
} 
fclose($file); 
//write the new file 
$result = file_put_contents($filename, $output); 
echo $result; 
if(!$result){ 
    echo 'faild'; 
}else{ 
    echo 'success <br/>'; 
    $load_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; 
    $load_link = str_replace('pars.php', '', $load_link); 
    $load_link .= $filename; 
    echo '<a href='.$load_link.'>See the results</a><br>'; 
} 


?> 
+1

Наконец-то! простой метод, который работает! Большое спасибо Mohammad, ваш сценарий идеально подходит для меня! – odedta

+0

Здравствуйте, Мохаммед, у меня есть вопрос о вашем коде: почему вы используете '@' в своей строке: '$ file = @fopen ($ filename, 'r');', для чего это? – odedta

+1

@odedta вы можете увидеть здесь http://php.net/manual/en/language.operators.errorcontrol.php –

-1

Почему бы вам просто не сгенерировать или не пометить PHP? Когда я делаю это действительно глупо и просто, это будет выглядеть следующим образом:

<?xml version='1.0' encoding='utf-8'?> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="he" xml:lang="he" dir="rtl"> 
<head> 
    <title>test</title> 
    <link rel="stylesheet" href="../Styles/cssreset-min.css" type="text/css"/> 
    <link rel="stylesheet" href="../Styles/page_styles.css" type="text/css"/> 
    <link rel="stylesheet" href="../Styles/style.css" type="text/css"/> 
</head> 

<body id="start"> 
<?php 
    if($something == "img") { 
     echo "<img src="../Images/cover.jpg" class="images" alt="Image 1"/>"; 
    } else { 
     echo "<svg src="../Images/cover.jpg" class="images" alt="Image 1"/>"; 
    } 
?> 
</body> 

+0

Поскольку у меня есть форма, где люди загружают ePub, я извлекаю из него все файлы HTML, и я хочу изменить их содержимое в соответствии с их формой ввода. – odedta

2

Вы ищете что-то вроде этого?

$html=file_get_contents($html_file); 
$img_tag= strip_tags($html, '<img><img/>'); 
$svg_tag='<svg>...'; 
$html=str_replace($img_tag,$svg_tag,$html); 
file_put_contents($html_file,$html); 

См strip_tags

+0

Предупреждение: preg_replace(): Неизвестный модификатор ']' – odedta

+0

Я пробовал '', но ничего не происходит. – odedta

+0

Я обновил свой ответ, намного проще с помощью 'strip_tags()' –

Смежные вопросы