Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > HTML и CSS
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2009, 07:05   #1
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию Как быстро убрать все атрибуты тегов?

Microsoft Word или Microsoft FronPage при копировании текста несут много мусора, например,

Код:
		<td width="129" valign="top" style="width: 96.4pt; height: 12.0pt; border-left: 
		medium none; border-right: 1.0pt solid windowtext; border-top: medium none; 
		border-bottom: 1.0pt solid windowtext; padding-left: 3.5pt; padding-right: 
		3.5pt; padding-top: 0cm; padding-bottom: 0cm">
Как быстро удалить все атрибуты и оставить только <td> ?
Alar вне форума Ответить с цитированием
Старый 09.05.2009, 08:32   #2
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

пройтись по коду регекспами...
свободен...
wall66 вне форума Ответить с цитированием
Старый 09.05.2009, 11:59   #3
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

PHP код:
function strip_attributes($msg$tag$attr$suffix "") {
     
$lengthfirst 0;
      while (
strstr(substr($msg$lengthfirst), "<$tag ") != "") {
              
$tag_start $lengthfirst strpos(substr($msg$lengthfirst), "<$tag ");
              
$partafterwith substr($msg$tag_start);
              
$img substr($partafterwith0strpos($partafterwith">") + 1);
              
$img str_replace(" =""="$img);
              
$out "<$tag";
              for(
$i=0$i count($attr); $i++){
                      if (empty(
$attr[$i])) {
                            continue;
                      }
              
$long_val = (strpos($img" "strpos($img$attr[$i] . "=")) === FALSE) ? strpos($img">"strpos($img$attr[$i] . "=")) - (strpos($img$attr[$i] . "=") + strlen($attr[$i]) + 1) : strpos($img" "strpos($img$attr[$i] . "=")) - (strpos($img$attr[$i] . "=") + strlen($attr[$i]) + 1);
               
$val substr($imgstrpos($img$attr[$i] . "=" ) + strlen($attr[$i]) + 1$long_val);
               if (!empty(
$val)) {
                       
$out .= " " $attr[$i] . "=" $val;
               }
         }
         if (!empty(
$suffix)) {
               
$out .= " " $suffix;
         }
         
$out .= ">";
         
$partafter substr($partafterwithstrpos($partafterwith,">") + 1);
         
$msg substr($msg0$tag_start). $out$partafter;
         
$lengthfirst $tag_start 3;
     }
     return 
$msg;

Эта функция принимает 4 параметры.

1. $msg. Текст, который вы хотите лишить атрибутов.
2. $tag. Тег, с которого вы хотите убрать атрибуты (p, span, div, например).
3. $attr. Массив с названиями атрибутов, которых вы хотите убрать (оставив остальные нетронутыми). Если массив пуст, функция уберет все атрибуты.
4. $suffix. Дополнительный текст, который надо добавить к тегу. Это может быть новый атрибут, например.

В твоем варианте фунцию надо использовать так:
PHP код:
$clear_text strip_attributes('<td width="129" valign="top" style="width: 96.4pt; height: 12.0pt; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: medium none; border-bottom: 1.0pt solid windowtext; padding-left: 3.5pt; padding-right: 3.5pt; padding-top: 0cm; padding-bottom: 0cm">''p'); 
Так же можно сделать и регуляркой (но надо помнить, что она намного медленнее работает, нежели строковые ф-ции). В кач-ве примера возьмем опять твой приведенный текст:

Код HTML:
var str = '<td width="129" valign="top" style="width: 96.4pt; height: 12.0pt; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: medium none; border-bottom: 1.0pt solid windowtext; padding-left: 3.5pt; padding-right: 3.5pt; padding-top: 0cm; padding-bottom: 0cm">';
var newstr = str.replace(/<\s*([a-z]+)([^|^\/]*) >/gi, "<$1>", "gi");
alert (newstr);
Как результат получишь:
Цитата:
<td>

Последний раз редактировалось SkyM@n; 09.05.2009 в 12:01.
SkyM@n вне форума Ответить с цитированием
Старый 09.05.2009, 19:17   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Parse error: syntax error, unexpected T_VAR in /home/puzzle/public_html/tagsclear.php on line 34
var str = '<td width="129" valign="top" - это 34 строчка

Последний раз редактировалось SkyM@n; 15.05.2009 в 10:17.
Alar вне форума Ответить с цитированием
Старый 09.05.2009, 21:58   #5
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

первый пример был на php, второй на js, они никак между собой не связаны
свободен...
wall66 вне форума Ответить с цитированием
Старый 09.05.2009, 23:34   #6
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Сообщение от wall66 Посмотреть сообщение
первый пример был на php, второй на js, они никак между собой не связаны
Эх елки зелёные, сейчас напишу на delphi, сложно всё у вас...
Alar вне форума Ответить с цитированием
Старый 09.05.2009, 23:50   #7
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
Как быстро убрать все атрибуты тегов?
Написать мини-программу на Делфи... ^_^
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 09.05.2009, 23:57   #8
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Вот код удаляет все атрибуты тегов на delphi, исходник прилагается

Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
newstr,str:string;
flag:integer;
begin
flag:=0;
for i:=0 to memo1.Lines.Count-1 do
begin
if flag=0 then newstr:='';
str:=memo1.Lines[i];

for j:=1 to length(str) do
begin
 if str[j]='<' then flag:=1;
 if (str[j]=' ')and(flag=1) then flag:=2;
  if str[j]='>' then flag:=0;
 if (flag=0)or(flag=1) then newstr:=newstr+str[j];
end;
 if flag=0 then memo2.Lines.add(newstr);
end;
end;

end.
wall66,

Цитата:
$clear_text = strip_attributes('<td width="129" valign="top" style="width: 96.4pt; height: 12.0pt; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: medium none; border-bottom: 1.0pt solid windowtext; padding-left: 3.5pt; padding-right: 3.5pt; padding-top: 0cm; padding-bottom: 0cm">', 'p');
с этим кодом у меня тоже не заработало, плюс здесь в параметрах передаётся для какого тега, а надо для всех.

да и так не работает ничего.

Цитата:
<script type="text/javascript">
var str = '<td width="129" valign="top" style="width: 96.4pt; height: 12.0pt; border-left: medium none; border-right: 1.0pt solid windowtext; border-top: medium none; border-bottom: 1.0pt solid windowtext; padding-left: 3.5pt; padding-right: 3.5pt; padding-top: 0cm; padding-bottom: 0cm">';
var newstr = str.replace(/<\s*([a-z]+)([^|^\/]*) >/gi, "<$1>", "gi");
alert (newstr);
</script>

cleartags.zip - это delphi код, - качаем
cleartagsexe.zip - это откомпилированная программа, - качаем
Вложения
Тип файла: zip cleartags.zip (12.4 Кб, 38 просмотров)
Тип файла: zip cleartagsexe.zip (189.7 Кб, 55 просмотров)
Alar вне форума Ответить с цитированием
Старый 12.05.2009, 12:12   #9
cronfy
Пользователь
 
Регистрация: 09.10.2008
Сообщений: 92
По умолчанию

Вы знатные изобретатели, товарищи!

Воспользуйтесь Tidy Html. Там даже специальная опция для этого есть: word-2000.

Есть даже онлайновая версия.
SPRINTHOST.RU — вот, что я люблю ;-)
cronfy вне форума Ответить с цитированием
Старый 18.02.2014, 21:11   #10
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию

Проблема очистки html актуальна и сейчас.
Вот например статья HtmlCleaner про очистку html от ненужных тегов и атрибутов тегов.
По-моему, вполне работоспособное решение для автоматической обработки текстов на php.
В бинарной системе счет ведут не по пальцам, а по кулакам.
Пенза - мой город - я из Пензы.
vasiatka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
потом убрать из множества все числа фибоначчи J_o_h_n_ Паскаль, Turbo Pascal, PascalABC.NET 5 18.04.2009 21:25
Все атрибуты всех тэгов, css. Deight HTML и CSS 5 13.02.2009 19:29
снять с папки все атрибуты шифрования Chi Операционные системы общие вопросы 4 09.12.2008 00:58
как качнуть из тегов текст в memo Лёка Работа с сетью в Delphi 4 03.02.2008 19:46
Как читать атрибуты с файлов? eks-s Общие вопросы Delphi 2 16.01.2008 02:25