Problem
I’m trying to edit HTML/PHP files server side with PHP. With AJAX Post I send three different values to the server:
- the
url
of the page that needs to be edited - the
id
of the element that needs to be edited - the new content for the element
The PHP file I have now looks like this:
<?php
$data = json_decode(stripslashes($_POST['data']));
$count = 0;
foreach ($data as $i => $array) {
if (!is_array($array) && $count == 0){
$count = 1;
// $array = file url
}
elseif (is_array($array)) {
foreach($array as $i => $content){
// $array[0] = id's
// $array[1] = contents
}
}
}
?>
As you can see I wrapped the variables in an array so it’s possible to edit multiple elements at a time.
I’ve been looking for a solution for hours but can’t make up my mind and tell what’s the best/possible solution.
Solution
I tried creating a new DOMElement and load in the html, but when dealing with a PHP file, this solution isn’t possible since it can’t save php files:
$html = new DOMDocument();
$html->loadHTMLFile('file.php');
$html->getElementById('myId')->nodeValue = 'New value';
$html->saveHTMLFile("foo.html");
(From this answer)
Opening a file, writing in it and saving it comes is another way to do this. But I guess I must be using str_replace
or preg_replace
this way.
$fname = "demo.txt";
$fhandle = fopen($fname,"r");
$content = fread($fhandle,filesize($fname));
$content = str_replace("oldword", "newword", $content);
$fhandle = fopen($fname,"w");
fwrite($fhandle,$content);
fclose($fhandle);
(From this page)
I read everywhere that str_replace
and preg_replace
are risky ‘caus I’m trying to edit all kinds of DOM elements, and not a specific string/element. I guess the code below comes close to what I’m trying to achieve but I can’t really trust it..
$replace_with = 'id="myID">' . $replacement_content . '</';
if ($updated = preg_replace('#id="myID">.*?</#Umsi', $replace_with, $file)) {
// write the contents of $file back to index.php, and then refresh the page.
file_put_contents('file.php', $updated);
}
(From this answer)
Question
In short: what is the best solution, or is it even possible to edit HTML elements content in different file types with only an id
provided?
Wished steps:
-
get file from
url
-
find element with
id
-
replace it’s content
171 / 169 / 1 Регистрация: 22.08.2010 Сообщений: 1,251 |
|
1 |
|
05.02.2011, 21:08. Показов 7583. Ответов 20
Есть html код который в ручную редактировать не удобно. Хочу сделать этот процесс более удобным.
0 |
26 / 18 / 1 Регистрация: 05.02.2011 Сообщений: 55 |
|
05.02.2011, 21:44 |
2 |
Надо полностью заменить код между тегами <body></body> или просто к существующему коду добавить сверху ? Покажите html-шаблон того что надо добавить.
1 |
OVSite 171 / 169 / 1 Регистрация: 22.08.2010 Сообщений: 1,251 |
||||
05.02.2011, 21:48 [ТС] |
3 |
|||
Нужно что бы в блок <div id=»Programma»></div> добавлялось.
0 |
26 / 18 / 1 Регистрация: 05.02.2011 Сообщений: 55 |
|
05.02.2011, 21:59 |
4 |
Я понял Вас так. Надо сделать форму с полем ввода текста, полем выбора фотки на компе, и кнопочки отправки формы. <img src=»наше изображение»> и вставить это между <div id=»Programma»></div> Так?
1 |
171 / 169 / 1 Регистрация: 22.08.2010 Сообщений: 1,251 |
|
05.02.2011, 22:02 [ТС] |
5 |
Я понял Вас так. Почти.
<div id=»text»>наш текст</div> Просто текст без тегов.
0 |
evgentus 26 / 18 / 1 Регистрация: 05.02.2011 Сообщений: 55 |
||||
05.02.2011, 22:46 |
6 |
|||
Если все правильно понял то вот.
1 |
171 / 169 / 1 Регистрация: 22.08.2010 Сообщений: 1,251 |
|
05.02.2011, 22:55 [ТС] |
7 |
А куда здесь сохраняется изображение?
0 |
evgentus 26 / 18 / 1 Регистрация: 05.02.2011 Сообщений: 55 |
||||
05.02.2011, 23:02 |
8 |
|||
скрипт в файл add.php, и в этой папке где add.php создаешь папку upload (или другую, ее название в UPLOAD_FOLDER в начале скрипта) в ней и будут картинки.
Ну от этого базового скрипта можете оттолкнуться, и дописать как Вам удобно, возможно я просто не понял что Вам нужно…
1 |
OVSite 171 / 169 / 1 Регистрация: 22.08.2010 Сообщений: 1,251 |
||||||||
05.02.2011, 23:37 [ТС] |
9 |
|||||||
Вот что выдал Warning: move_uploaded_file(): Unable to move ‘/var/tmp/phpNv7awk’ to ‘,image/COMODO.png’ in /home/o/ovsite.h18.ru/WWW/Editor.php on line 26
Вот файл обработчик
Добавлено через 6 минут Добавлено через 17 минут Добавлено через 1 минуту
0 |
26 / 18 / 1 Регистрация: 05.02.2011 Сообщений: 55 |
|
05.02.2011, 23:41 |
10 |
Индексный файл точно так называется и имеет такое же расширение как в константе? ПС. Попробуйте в else{ } если что то напечатает вместо белого экрана, напишите.
1 |
171 / 169 / 1 Регистрация: 22.08.2010 Сообщений: 1,251 |
|
05.02.2011, 23:42 [ТС] |
11 |
define(«FILE», ‘index.html’); Изменил на index.php.
0 |
26 / 18 / 1 Регистрация: 05.02.2011 Сообщений: 55 |
|
05.02.2011, 23:43 |
12 |
Да можно и отдельные файлы, можно и один, разницы то нет… Но в одном как то компактнее.
1 |
171 / 169 / 1 Регистрация: 22.08.2010 Сообщений: 1,251 |
|
05.02.2011, 23:45 [ТС] |
13 |
Белый экран. Добавлено через 42 секунды
Просто надо записать мой код в файл add.php и поменять там константы если нужно. Я изменил название с add.php на Editor.php и в коде это тоже изменил.
0 |
26 / 18 / 1 Регистрация: 05.02.2011 Сообщений: 55 |
|
06.02.2011, 00:02 |
14 |
У папки с картинками должны быть права на запись, у index.php аналогично. Надо переделать скрипт, а то он перезапишет все Ваши предыдущие данные в index.php Надо будет читать index.php в переменную, допустим $fullFile = file_get_contents(FILE); Я в регулярках не спец, поищите в инете как это сделать…
1 |
171 / 169 / 1 Регистрация: 22.08.2010 Сообщений: 1,251 |
|
06.02.2011, 00:06 [ТС] |
15 |
У папки с картинками должны быть права на запись, у index.php аналогично. Проверял, в папке изображения появляются.
Надо будет читать index.php в переменную, допустим $fullFile = file_get_contents(FILE); Можно по подробнее и с кодом?
0 |
evgentus 26 / 18 / 1 Регистрация: 05.02.2011 Сообщений: 55 |
||||
06.02.2011, 00:43 |
16 |
|||
Нужно просто создать файл Editor.php и залить в него всё что написано ниже.
1 |
171 / 169 / 1 Регистрация: 22.08.2010 Сообщений: 1,251 |
|
06.02.2011, 13:51 [ТС] |
17 |
Этот код тоже не работает.
0 |
26 / 18 / 1 Регистрация: 05.02.2011 Сообщений: 55 |
|
06.02.2011, 13:57 |
18 |
У меня он работает без проблем, копайте в сторону прав доступа на файл index.php и папку image
0 |
171 / 169 / 1 Регистрация: 22.08.2010 Сообщений: 1,251 |
|
06.02.2011, 14:02 [ТС] |
19 |
У меня он работает без проблем, копайте в сторону прав доступа на файл index.php и папку image Какие права выставлять я знаю, а вот как их выставлять это проблема.
0 |
26 / 18 / 1 Регистрация: 05.02.2011 Сообщений: 55 |
|
06.02.2011, 14:10 |
20 |
Через Total Commander на ftp надо зайти и выбрать «change attributes»(помоему так называется)…
0 |
За последние 24 часа нас посетили 11527 программистов и 1181 робот. Сейчас ищут 235 программистов …
-
- С нами с:
- 28 окт 2015
- Сообщения:
- 5
- Симпатии:
- 0
Прошу помощи!
переменная содержит код html, необходимо сделать найти и заменить часть кода(«<span style=»color:#A9A9A9″><strong><Фирма></strong></span>»), на другое значение.
сделать это функцией str_replace() не получается, так же strpos() тоже не находит -
Команда форума
Модератор-
$str = ‘<div><span style=»color:#A9A9A9″><strong><Фирма></strong></span></div>’;
-
$r= str_replace(‘<span style=»color:#A9A9A9″><strong><Фирма></strong></span>’, ‘<p>hello</p>’, $str);
-
-
- С нами с:
- 28 окт 2015
- Сообщения:
- 5
- Симпатии:
- 0
да, так все получается, но я значение «<span style=»color:#A9A9A9″><strong><Фирма></strong></span>» беру из базы, и
str_replace( $data[0] , ‘<p>hello</p>’, $str)- уже не срабатывает-
[0] => <span style=»color:#A9A9A9″><strong><Фирма></strong></span>
-
[1] => <span style=»color:#A9A9A9″><strong><ВидДеятельности></strong></span>
-
- С нами с:
- 28 окт 2015
- Сообщения:
- 5
- Симпатии:
- 0
нужно «…фирма…» на <p>hello1</p>, а «…ВидДеятельности…» на <p>hello2</p>
но $data[0] = ‘<span style=»color:#A9A9A9″><strong><Фирма></strong></span>’ и в данном случае
str_replace($data[0] ,'<p>hello1</p>’, $str)
, почему то не заменяетсяа при прямом подставлении
str_replace(‘<span style=»color:#A9A9A9″><strong><Фирма></strong></span>’ ,'<p>hello1</p>’, $str)
замена происходит -
- С нами с:
- 15 дек 2013
- Сообщения:
- 3.010
- Симпатии:
- 58
так наверное для начала дубиноголовый надо было сказать что значение в теге меняется.
это все сюрпризы или еще будут?
-
$str = ‘<div><span style=»color:#A9A9A9″><strong><Фирма></strong></span></div>’;
-
$before = ‘<span style=»color:#A9A9A9″><strong>’;
-
$after = ‘</strong></span>’;
-
- С нами с:
- 28 окт 2015
- Сообщения:
- 5
- Симпатии:
- 0
читай внимательней, ответ не в тему
я не меняю значение в тегах!!!!
я меняю в строке с тегами и значениями, определенный кусок с тегами и значениями, на другой кусок с тегами и значениями!
это ‘<span style=»color:#A9A9A9″><strong><Фирма></strong></span>’ на ‘<p>hello1</p>’ в строке $str -
Команда форума
МодераторУ меня всё работает и с массивом, возможно дело в другом, может кодировка не совпадает или не видим всей картины
-
header(‘Content-Type: text/html; charset=utf-8’);
-
‘<span style=»color:#A9A9A9″><strong><Фирма></strong></span>’,
-
‘<span style=»color:#A9A9A9″><strong><ВидДеятельности></strong></span>’,
-
$str = ‘<div><span style=»color:#A9A9A9″><strong><Фирма></strong></span></div>’;
-
-
- С нами с:
- 28 окт 2015
- Сообщения:
- 5
- Симпатии:
- 0
да, похоже дело в кодировке, видимо из базы значение приходят такие
Спасибо!
Данный вопрос возникает при верстке писем т.к. стили прописанные в <head>
в почтовых сервисах и программах не работают, а в ручную прописывать стили каждому тегу вручную долго и не удобно. Далее представлены варианты как автоматизировать этот процесс.
Пример HTML кода в котором нужно добавить стили.
$html = '
<p>Текст <span>1</span></p>
<p style="text-align: center">Текст 2</p>
<img src="/uploads/logo.png">
';
PHP
Массив тегов и стилей которые нужно добавить.
$tags = array(
'span' => 'color: #000;',
'p' => 'padding: 0;',
'img' => 'border: none;'
);
PHP
1
Вариант на регулярных выражениях
Функция ищет теги, из них достает атрибуты, дописывает их и делает замену в тексте.
function add_html_style($html, $tags)
{
foreach ($tags as $tag => $style) {
preg_match_all('/<' . $tag . '([s].*?)?>/i', $html, $matchs, PREG_SET_ORDER);
foreach ($matchs as $match) {
$attrs = array();
if (!empty($match[1])) {
preg_match_all('/[ ]?(.*?)=["|'](.*?)["|'][ ]?/', $match[1], $chanks);
if (!empty($chanks[1]) && !empty($chanks[2])) {
$attrs = array_combine($chanks[1], $chanks[2]);
}
}
if (empty($attrs['style'])) {
$attrs['style'] = $style;
} else {
$attrs['style'] = rtrim($attrs['style'], '; ') . '; ' . $style;
}
$compile = array();
foreach ($attrs as $name => $value) {
$compile[] = $name . '="' . $value . '"';
}
$html = str_replace($match[0], '<' . $tag . ' ' . implode(' ', $compile) . '>', $html);
}
}
return $html;
}
echo add_html_style($html, $tags);
PHP
Результат работы функции
<p style="padding: 0;">Текст <span style="color: #000;">1</span></p>
<p style="text-align: center; padding: 0;">Текст 2</p>
<img src="/uploads/logo.png" style="border: none">
2
Вариант на phpQuery
phpQuery на Google Code
Особенности:
- Приводит HTML код к валидному виду — закрывает незакрытые теги, удаляет лишние пробелы, переводит названия тегов и атрибутов в нижний регистр.
- Заменяет мнемоники на символы.
require '/phpQuery.php';
$dom = phpQuery::newDocument($html);
foreach ($tags as $tag => $style) {
$elements = $dom->find($tag);
foreach ($elements as $element) {
$pq = pq($element);
$attrs = $pq->attr('style');
if (empty($attrs)) {
$pq->attr('style', $style);
} else {
$pq->attr('style', rtrim($attrs, '; ') . '; ' . $style);
}
}
}
echo (string) $dom;
PHP
Результат
<p style="padding: 0;">Текст <span style="color: #000;">1</span></p>
<p style="text-align: center; padding: 0;">Текст 2</p>
<img src="/uploads/logo.png" style="border: none">
3
Вариант на классе DOMDocument
В данном случаи не подходит т.к. к верстке добавляется теги <html>
, <head>
, <body>
.
$doc = new DOMDocument('1.0', 'UTF-8');
@$doc->loadHTML($html);
foreach ($tags as $tag => $style) {
$elements = $doc->getElementsByTagName($tag);
foreach ($elements as $element) {
$attrs = $element->getAttribute('style');
if (empty($attrs)) {
$element->setAttribute('style', $style);
} else {
$element->setAttribute('style', rtrim($attrs, '; ') . '; ' . $style);
}
}
}
echo html_entity_decode($doc->saveHTML());
PHP
Результат
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<body>
<p style="padding: 0;">Текст <span style="color: #000;">1</span></p>
<p style="text-align: center; padding: 0;">Текст 2</p>
<img src="/uploads/logo.png" style="border: none">
</body>
</html>
25.12.2016, обновлено 21.09.2019
Другие публикации
Один из вариантов поиска похожих статей в базе данных основан на схождении слов в двух текстах.
PHP функции для перевода текста, ЧПУ, ссылок и имен файлов в транслит.
Несколько примеров как перевести цвета из HEX в RGB и обратно с помощью PHP.
Набор PHP функций для работы с директориями, получение списка файлов в папке, копирование и удаление содержимого папок.
Smarty это компилирующий обработчик шаблонов для PHP позволяющий отделить логику и HTML-верстку веб-приложения.
К сожалению разработчики прекратили поддержку и разработку проекта, но PHPExcel все равно остается популярной…
FallenSoul |
Добрый день. Прочитал руководства по установке апач+пхп+Mysql, учебник по пхп- всё очень хорошо написано и главное работает. Но вот что я не нашел в учебнике. Каким образом реализуется механизм изменения содержимого .пхп страницы ? Вот index.php на котором 2 формы для входа в систему. Как в этом отрывке if(strcmp($login,$row->login)==0 && strcmp($pass,$row->passw)==0) } реализовать «очистку страницы» и вывода на абсолютно чистой новой странице с тем же адресом в URL /index.php сообщение вида «Добро пожаловать.», но чтобы ни форм ничего другого там не было а только текст. Весьма благодарен. <html> <body> <? include «config.php»; $login=$HTTP_GET_VARS[‘login’]; |
||
|
RXL
Технический
|
1. $HTTP_GET_VARS[‘login’] 2. Проверка логин/пароля. <?php 3. Изменение состава выводимой страницы. <?php |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
FallenSoul |
По поводу первых 2х пунктов я понял, а что касается третьего: Допустим у нас 3 страницы- Главная с формами для заполнения, промежуток с приветствием «Добро пожаловать » такой то юзер, содержимое отображающееся только для авторизированного юзера. Какое взять условие для этих 3х случаев? |
||
|
RXL
Технический
|
Если попроще, то так: <?php |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
FallenSoul |
Еще один вопрос … Как передавать допустим со страницы «Добро пожаловать» на следующую на которую переход будет по ссылке допустим переменную чтобы проверять какого её значение, в подтверждение того что пользователь попал в авторизованную зону введя логин и пароль предварительно. ? |
||
|
Sla
Команда клуба
|
например так: |
||
Мы все учились понемногу… Чему-нибудь и как-нибудь. |
FallenSoul |
Не совсем понял. Точнее понял, но не до конца. Вот у меня после проверки на первой странице правильности ввода логина/пароля отображается следующее Добро пожаловать. Выше я переменной $enter задавал значение если она в положительной ветке условного оператора который проверяет правильность ввода логина/пароля. А на следующей странице адресс у меня выглядит как main.php?enter=$enter,но проверку if($enter==0) <font face=Verdana size=1> <? } ?> Не проходит. |
||
|
RXL
Технический
|
FallenSoul, тебя спасет использование сессий. См. в мануале session_start() и все, что написано рядом. Загляни в наши статьи — год назад я писал по этому делу. |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
FallenSoul |
<? $today = date(«m.d.y H:i:s»); if(!empty($name) && !empty($pass) && !empty($nick)) $sql=mysql_query($play); if($x==0 && mysql_num_rows($sql) > 0) echo «Такой логин уже существует»; mysql_query(«insert into player values (NULL,’$name’,’$pass’,’$nick’,’$sex’,’$born’,NULL,’$today’) «); } ?> Сессии потихоньку осваиваю-а вот отрывок из регистрации которую переписал в том стиле в котором мне написали авторизацию. Здесь есть какие то неточности или что-то лишнее ? |
||
|
FallenSoul |
Вопрос по поводу php и MySql. При регистрации мне приходится выполнять след. запрос : mysql_query(«insert into player values (NULL,’$name’,’$pass’,’$nick’,’$sex’,’$born’,’0′,’0′,’3′,’3′,’3′,’$today’) «); хотя предпоследние 5 параметров 0,0,…,3 у меня в таблице равны соответствующим числам по default’у,но не указывая их или оставляя пустым содержимое ковычек, добавлять новую запись в таблицу не хочет. 3 вопроса. |
||
|
RXL
Технический
|
FallenSoul, связывать интерактивные страницы можно по разному. Типичный подход: сохранение параметров в сессии. Вопрос по поводу php и MySql. При регистрации мне приходится выполнять след. запрос : mysql_query(«insert into player values (NULL,’$name’,’$pass’,’$nick’,’$sex’,’$born’,’0′,’0′,’3′,’3′,’3′,’$today’) «); хотя предпоследние 5 параметров 0,0,…,3 у меня в таблице равны соответствующим числам по default’у,но не указывая их или оставляя пустым содержимое ковычек, добавлять новую запись в таблицу не хочет. 3 вопроса. 1. Можно. 2. Вообще, это вопрос не по web — см. его в мануале по MySQL. Для вставки неполной строки нужно указать список столбцов. INSERT INTO TABLE (col1, col7, col8, col9) VALUES (1, 7, 8, 9) 3. Это проблема не MySQL, а утилиты, которой ты пользуешься. Если, к примеру, у тебя винда и ты хранишь в базе текст в кодировке windows-1251, при просмотре его через консольную утилиту получишь мусор, т.к. виндовая консоль работает с кодировкой cp866 (дебильное наследие прошлого). Для удобства администрирования поставь PHPMyAdmin — web-инструмент для администрирования MySQL. |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
FallenSoul |
Каждый день узнаю всё больше и больше нового для себя, и спс тебе за это =) Поставил пхпадмин, изменил код занесения учетной записи в таблицу при регистрации на следующий : $query=»insert into player values Всё довольно удобно,но только ради интереса подскажи- почему и пхп админ показывает мне в столбце nick который при регистрации я ввожу русскими буквами абра кадабру? id_player login passw nick sex born gold level str dex stam regdate Перед тем как занести, все текстовые переменные обрабатываю след. образом : $nick=$_POST[«nick»]; |
||
|
RXL
Технический
|
‘$sex’,’$born’ Ты уверен, что тут именно числа? Если эти данные получены от клиента, то надо обязательно их проверить перед вставкой. Для чисел можно сделать так: $born = 0 + $born; Это автоматом конвертит строку в число и если она не является числом, то преобразуется в ноль. Запомни важную вещь: все данные, полученные от клиента, потенциально опасные. Их нужно проверять и по возможности не использовать напрямую. Напр., параметер sex. Это перечисляемый тип с конечным кол-вом значений и лучше передавать его в виде числа. <?php $sex = isset($_POST[‘sex’]) ? $_POST[‘sex’] : 0; // передан ли вообще параметер if ($sex < 0 || $sex > 2) $nick = htmlspecialchars(stripslashes($nick)); По моему это излишество. Уникальные столбцы (напр. nick) полезно проверять до вставки или обработать ошибку вставки. Кракозябры: не настроена кодировка PHPMyAdmin-а. Быстрее всего он у тебя объявил страницу как iso8859-1, а тебе нужно windows-1251. Посмотри в его настройках (в конфиге). |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
FallenSoul |
по поводу $sex и $born я специально сделал их числами и затем в самом коде в отличие от того какое значение принимают эти переменные происходит вывод. if($sex==1) (string)$sex=»Мужской»; echo «<b>Пол : </b>» .$sex. «<br>»; htmlspecialchars() , stripslashes() -это всё старался делать по учебнику чтобы защититься от всяких недоброжелателей Нашел следующие настройки- стояло и вправду iso8859-1, но заменив на windows-1251 ничего не изменилось =- Менял кодировку-толку 0. $cfg[‘DefaultLang’] = ‘windows-1251’; 3 А что можно придумать с взаимодействием 2х таблиц о кот. я выше попробовал изложить? |
||
|
RXL
Технический
|
htmlspecialchars() , stripslashes() -это всё старался делать по учебнику чтобы защититься от всяких недоброжелателей Делать надо зная, что и зачем делается. Не торопись делать умные страницы — просто поэкспериментируй в ф-иями и посмотри, какая что делает. Рекомендую смотреть html-код генерируемой страницы — брузер может делать поблажки, но это не значит, что так можно делать. $cfg[‘DefaultLang’] = ‘windows-1251’; Lang — это язык (language), а не кодировка. Оставь «en» или задай «ru» (если конечно есть его поддержка). 3 А что можно придумать с взаимодействием 2х таблиц о кот. я выше попробовал изложить? В теме нет «2-х таблиц». О чем речь? |
||
… мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. |
(PHP 5, PHP 7, PHP
DOMElement::setAttribute — Добавляет новый или изменяет существующий атрибут
Описание
public DOMElement::setAttribute(string $qualifiedName
, string $value
): DOMAttr|bool
Список параметров
-
qualifiedName
-
Имя атрибута.
-
value
-
Значение атрибута.
Возвращаемые значения
Созданный или изменённый объект класса DOMAttr
или false
в случае возникновения ошибки.
Ошибки
-
DOM_NO_MODIFICATION_ALLOWED_ERR
-
Возникает, если узел доступен только для чтения.
Примеры
Пример #1 Установка значения атрибута
<?php
$doc = new DOMDocument("1.0");
$node = $doc->createElement("para");
$newnode = $doc->appendChild($node);
$newnode->setAttribute("align", "left");
?>
Смотрите также
- DOMElement::hasAttribute() — Проверяет, существует ли атрибут
- DOMElement::getAttribute() — Возвращает значение атрибута
- DOMElement::removeAttribute() — Удаляет атрибут
Rakesh Verma — rakeshnsony at gmail dot com ¶
12 years ago
<?php
//Store your html into $html variable.
$html="
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
<a href='http://example.com'>Example</a><br>
<a href='http://google.com'>Google</a><br>
<a href='http://www.yahoo.com'>Yahoo</a><br>
</body>
</html>"
;$dom = new DOMDocument();
$dom->loadHTML($html);//Evaluate Anchor tag in HTML
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
for (
$i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('href');//remove and set target attribute
$href->removeAttribute('target');
$href->setAttribute("target", "_blank");$newURL=$url."/newurl";//remove and set href attribute
$href->removeAttribute('href');
$href->setAttribute("href", $newURL);
}// save html
$html=$dom->saveHTML();
echo
$html;?>
info at ensostudio dot ru ¶
1 year ago
Solution to render HTML 5 tags with attributes with/without value:
<?php
$dom = new DOMImplementation();
$doc = $dom->createDocument(null, 'html', $dom->createDocumentType('html'));$tag = $doc->appendChild($doc->createElement('input'));
$tag->setAttribute('type', 'text');
$tag->setAttribute('disabled', '');
echo
$doc->saveHTML($tag); // <input type="text" disabled="">$doc->normalize(); // normalize attributes
echo $doc->saveHTML($tag); // <input type="text" disabled>
?>
lehal2@hotmail ¶
9 years ago
The use of Dom to first remove and then add the width and height to the first img tag from the text.I hope it help you to save your time
<?php
$html = '
<img src="http://www.example.com/images/header.jpg" width="898" height="223" style="border-bottom:5px solid #cccccc;"/>
<img src="http://www.example.com/images/header2.jpg" width="898" height="223" style="border-bottom:5px solid #cccccc;"/>
'
;$doc = DOMDocument::loadHTML($html);
$c =0;
foreach($doc->getElementsByTagName('img') as $image){
if ($c>0) continue;
foreach(array('width', 'height') as $attribute_to_remove){
echo $attribute_to_remove;
if($image->hasAttribute($attribute_to_remove)){
$image->removeAttribute($attribute_to_remove);
}
if(
$attribute_to_remove=='height'){
if(!$image->hasAttribute($attribute_to_remove)){
$image->setAttribute($attribute_to_remove,'220');
}}
if(
$attribute_to_remove=='width'){
if(!$image->hasAttribute($attribute_to_remove)){
$image->setAttribute($attribute_to_remove,'700');
}}
$c = $c+1;
}
}
echo $doc->saveHTML();
address at gmail dot com ¶
14 years ago
If wanting to set an attribute of an element with unique id of "1"
<?php
$dom = new DomDocument();
$dom->load('test.xml');
$xp = new DomXPath($dom);
$res = $xp->query("//*[@id = '1']");
$res->item(0)->setAttribute('title','2');
$dom->save('test.xml');
?>
karvjorm at users.sourceforge.net ¶
15 years ago
$dom = new DomDocument('1.0','iso-8859-15');
$ht_ml = $dom->appendChild($dom->createElement('html'));
$ht_ml->setAttribute('xmlns','http://www.w3.org/1999/xhtml');
$ht_ml->setAttribute('xml:lang','fi');
$ht_ml->setAttribute('lang','fi');
Result:
<?xml version="1.0" encoding="iso-8859-15"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi" lang="fi">
Vasil Rangelov ¶
15 years ago
@karvjorm,
Using this method is not exactly a good practice. Infact, I think it may be a bug.
Names beginning with "xml" are reserved (for namespaces in this case).
setAttribute() should return false in this case I think, but I suppose it doesn't.
Still, the right way to do it is with createElementNS().
It lets you specify the namespace when creating the element node.
So the equivalent to yours ($html added to allow word wrapping) is:
$dom = new DomDocument('1.0','iso-8859-15');
$html = $dom->createElementNS('http://www.w3.org/1999/xhtml', 'html');
$ht_ml = $dom->appendChild($html);
$ht_ml->setAttribute('xml:lang','fi');
$ht_ml->setAttribute('lang','fi');