Помогите с PHP простоhtmldom - Модификация формы - PullRequest
0 голосов
/ 01 мая 2010

Мне здесь очень помогли, и я настолько близок к решению своей проблемы, что могу ее попробовать. Но я, кажется, застрял.

Мне нужно очистить простую форму от локального веб-сервера и вернуть только те строки, которые соответствуют локальной электронной почте пользователя (то есть onemyndseye @ localhost). simplehtmldom упрощает извлечение правильного элемента формы:

foreach($html->find('form[action*="delete"]') as $form) echo $form;

Возвращает:

<form action="/delete" method="post">
    <input type="checkbox" id="D1" name="D1" /><a href="http://www.linux.com/rss/feeds.php">
        http://www.linux.com/rss/feeds.php
    </a> [email: 
        onemyndseye@localhost (Default)
    ]<br />         
    <input type="checkbox" id="D2" name="D2" /><a href="http://www.ubuntu.com/rss.xml">
        http://www.ubuntu.com/rss.xml
    </a> [email: 
        onemyndseye@localhost (Default)
    ]<br />         
<input type="submit" name="delete_submit" value="Delete Selected" /></form>

Однако я не могу сделать следующий шаг. Который возвращает строки, содержащие onemyndseye @ localhost, и удаляет его, так что возвращается только следующее:

<input type="checkbox" id="D1" name="D1" /><a href="http://www.linux.com/rss/feeds.php">http://www.linux.com/rss/feeds.php</a> <br />
<input type="checkbox" id="D2" name="D2" /><a href="http://www.ubuntu.com/rss.xml">http://www.ubuntu.com/rss.xml</a> <br />

Благодаря замечательным пользователям этого сайта, я дошел до этого и даже могу вернуть только ссылки, но у меня возникают проблемы с получением остальных ... Важно, чтобы полные теги <input> возвращались ТОЧНО, как показано выше, Значения идентификатора и имени необходимо будет впоследствии вернуть в исходную форму в данных поста.

Заранее спасибо!

***** EDIT ******

Теперь проблема близка к решению благодаря Якоби. Последнее небольшое препятствие заключается в том, что от str_ireplace осталось немного мусора. Возможно, было бы легче удалить весь текст между </a> и <br /> ...?

После добавления Якоби вывод будет следующим:

<form action="/delete" method="post">
    <input type="checkbox" id="D1" name="D1" /><a href="http://www.linux.com/rss/feeds.php">
        http://www.linux.com/rss/feeds.php
    </a> [email: 
         (Default)
    ]<br />         
    <input type="checkbox" id="D2" name="D2" /><a href="http://www.ubuntu.com/rss.xml">
        http://www.ubuntu.com/rss.xml
    </a> [email: 
         (Default)
    ]<br />         
    <input type="checkbox" id="D3" name="D3" /><a href="http://mythbuntu.org/rss.xml">
        http://mythbuntu.org/rss.xml
    </a> [email: 

    ]<br />         
<input type="submit" name="delete_submit" value="Delete Selected" /></form>

Обратите внимание, что [email: (по умолчанию)] и [email:] остались позади. Также необходимо удалить действие формы и, наконец, отправить строки, но эту часть, я думаю, я могу извлечь из предыдущего предложения.

***** SOLVED ****

проблема решена с помощью:

$html = file_get_html('http://localhost:9000/');
foreach($html->find('form[action*="delete"]') as $form)
  if ( stripos($form->innertext, 'onemyndseye@localhost') !== false ){
      $form = preg_replace('!</a>.*?<br />!s', '</a><br />', $form);
      echo $form;
}

Спасибо за помощь!

1 Ответ

0 голосов
/ 01 мая 2010

Может быть, что-то вроде

if ( stripos($form->innertext, 'onemyndseye@localhost') !== false ){
    $form->innertext = str_ireplace('onemyndseye@localhost', '', $form->innertext);
    echo $form;
}

Это не будет работать с HTML, как

<b>onemyndseye</b>@localhost

Поскольку легко найти, совпадает ли текст с удаленными тегами со строкой, используя plaintext, но заменить его гораздо сложнее.

...