Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: html + php
Форумы портала PHP.SU » » Вопросы новичков » html + php

Страниц (2): [1] 2 »
 

1. reslear - 09 Августа, 2011 - 21:42:25 - перейти к сообщению
Всем привет!
помогите с формированием нет идей вообще ....

нужно что бы из этого :

CODE (html):
скопировать код в буфер обмена
  1. <div><a href="http://"></a><a href="http://"></a><a href="http://"></a><div><a href="http://"></a></div></div>


получить читаемый формат:

CODE (html):
скопировать код в буфер обмена
  1. <div>
  2.   <a href="http://"></a>
  3.   <a href="http://"></a>
  4.   <a href="http://"></a>
  5.   <div>
  6.     <a href="http://"></a>
  7.   </div>
  8. </div>
2. iflight - 09 Августа, 2011 - 21:59:49 - перейти к сообщению
Вопрос что-то не понятен(:
Вам надо чтобы конечный html так выглядел? тогда можно двойные ковычки и \n\r использовать
3. reslear - 09 Августа, 2011 - 22:03:35 - перейти к сообщению
нет я пишу программу на php и тут понадобилась такая функция как формирование html смысл заключается в том что юзер вставляет html нажимает кнопку всё код становится понятным для чтения!
4. DeepVarvar - 09 Августа, 2011 - 22:16:26 - перейти к сообщению
Оу, мысль Закатив глазки
Но не все так просто.
5. White - 09 Августа, 2011 - 22:17:07 - перейти к сообщению

используйте кнопки enter и tab Подмигивание

а если серьезно, то просто переносы сделать несложно:
PHP:
скопировать код в буфер обмена
  1.  
  2. $text='<div><a href="http://"></a><a href="http://"></a><a href="http://"></a><div><a href="http://"></a></div></div>';
  3. $text=strtr($text, array("</div>"=>"</div>\n", "</a>"=>"</a>\n", "<div>"=>"\n<div>\n"));
  4. $row=explode("\n", $text);
  5. $starttab=0;
  6. foreach($row as $value) {
  7.   $value=trim($value);
  8.   if(strtolower($value)=='</div>') $starttab=$starttab-1;
  9.   $tab='';
  10.   for($i=0;$i<$starttab;$i++) $tab.="\t";
  11.   if($value) echo $tab.$value."\n";
  12.   if(strtolower($value)=='<div>') ++$starttab;
  13. }
  14. ?>
  15.  
6. DeepVarvar - 09 Августа, 2011 - 22:19:43 - перейти к сообщению
White до первой вложенности.
Я так сразу подумал что придется строить полное DOM-дерево в массиве и выводить потом рекурсивно.
7. White - 09 Августа, 2011 - 22:24:21 - перейти к сообщению
DeepVarvar
чуток подправил код, с дивами работает нормально, с конкретным данным примером выдает абсолютный результат.
8. reslear - 09 Августа, 2011 - 22:25:05 - перейти к сообщению
White, спасибо за идею!!!!!

DeepVarvar, можно пример скрипта????
9. White - 09 Августа, 2011 - 22:33:37 - перейти к сообщению
DeepVarvar пишет:
до первой вложенности.
до первых параметров в открывающем теге, но идею можно развить, строить DOM дерево как по мне здесь необязательно
10. reslear - 09 Августа, 2011 - 22:49:44 - перейти к сообщению
ага если
CODE (html):
скопировать код в буфер обмена
  1. <a href="http://"><div>kkk</div></a>


то кидает :

CODE (html):
скопировать код в буфер обмена
  1. <a href="http://">
  2. <div>
  3. kkk</div>
  4. </a>
11. White - 09 Августа, 2011 - 22:55:53 - перейти к сообщению
правим 3 строчку и вуаля:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $text=strtr($text, array("</div>"=>"\n</div>\n", "</a>"=>"</a>\n", "<div>"=>"\n<div>\n"));
12. reslear - 09 Августа, 2011 - 23:21:59 - перейти к сообщению
White

теперь так получается:

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <a href="http://">
  3. <div>
  4. kkk
  5. </div>
  6. </a>


нужно что бы было :

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <a href="http://">
  3.   <div>kkk</div>
  4. </a>


и именно пробелы
13. iflight - 10 Августа, 2011 - 00:43:05 - перейти к сообщению
Ого) "очень легкий вопрос" ))
А мне кажется надо извлекать DOM структуру и последовательно выводить теги\контент, каждого уровня. Так наиболее гибко будет имхо(в том смысле что для любых страниц + без модификации подойдет и для xml и для новых стандартов html)... Тока это задачка не для меня ))
14. DeepVarvar - 10 Августа, 2011 - 04:13:19 - перейти к сообщению
Примерно если, то как-то так...
PHP:
скопировать код в буфер обмена
  1.  
  2. function getDOM(&$build,$str,$layer) {
  3.   $layer++;
  4.   if (preg_match_all("#<([a-z]+)>(.*)</\\1>#iU",$str,$match)) {
  5.     foreach ($match[2] as $sstr) {
  6.       $nsstr = "\r\n".str_repeat("\t",$layer+1).$sstr."\r\n".str_repeat("\t",$layer);
  7.       $build = str_replace($sstr,$nsstr,$build);
  8.       getDOM($build,$sstr,$layer);
  9.       }
  10.     }
  11.   }
  12.  
  13. // эмулируем отсутствие отступов и переносов
  14. $b = array("\r","\n","\t");
  15. $build = $str = str_replace($b,"",file_get_contents("file.html"));
  16.  
  17. $layer = -1;
  18.  
  19. getDOM($build,$str,$layer);
  20.  
  21. echo $build;
  22.  

Но это далеко от идеала.
Просто принцип...
15. reslear - 10 Августа, 2011 - 12:01:26 - перейти к сообщению
DeepVarvar да выдаёт что то вроде :

CODE (html):
скопировать код в буфер обмена
  1. <div>
  2.         <a href="http://"></a><a href="http://"></a><a href="http://"></a><div><a href="http://"></a>
  3. </div></div>


но второй код как нужно :

CODE (html):
скопировать код в буфер обмена
  1. <a href="http://">
  2.   <div>kkk</div>
  3. </a>

 

Powered by ExBB FM 1.0 RC1