Nasıl HTML etiketleri veri şerit yok

6 Cevap php

Bu gibi veriler var ki:

<option value="abc" >Test - 123</option>
<option value="def" >Test - 456</option>
<option value="ghi" >Test - 789</option>

PHP kullanarak, nasıl ben seçenek değerleri içinde tüm metin dönen, HTML etiketleri sıralamak istiyorum. 'Testi - 789', - '456 Testi' - Örneğin, yukarıda kodu verilir, ben '123 Testi' dönmek istiyorum.

Yardımın için teşekkürler!

UPDATE: So that I'm more clear - I'm using filegetcontents() to get the html from a site. For my purposes, I'd like to be able to sort through the html, find the option values, and output them. In this case, return 'Test - 123', 'Test - 456', etc.

6 Cevap

Biz regex şeyler yapıyorsanız, ben bu perl gibi sözdizimi gibi:

$test = "<option value=\"abc\" >Test - 123</option>\n" .
    "<option value=\"abc\" >Test - 456</option>\n" .
    "<option value=\"abc\" >Test - 789</option>\n"; 

for ($offset=0; preg_match("/<option[^>]*>([^<]+)/",$test, $matches, 
                        PREG_OFFSET_CAPTURE, $offset); $offset=$matches[1][1])
   print($matches[1][0] . "\n");'

There are many ways, which one is the best depends on more details than you've provided in your question.
One possibility: DOMDocument and DOMXPath

<?php
$doc = new DOMDocument;
$doc->loadhtml('<html><head><title>???</title></head><body>
  <form method="post" action="?" id="form1">
      <div>
        <select name="foo">
        <option value="abc" >Test - 123</option>
        <option value="def" >Test - 456</option>
        <option value="ghi" >Test - 789</option>
      </select>
    </div>
  </form>
</body></html>');

$xpath = new DOMXPath($doc);
foreach( $xpath->query('//form[@id="form1"]//option') as $o) {
    echo 'option text: ', $o->nodeValue, "  \n";
}

baskılar

option text: Test - 123  
option text: Test - 456  
option text: Test - 789

Bu kod gösterdiğim gibi seçenek etiketleri arasında satır sonları varsayarak, bir diziye değerleri yük olacaktır:

// Load your HTML into a string.
$html = <<<EOF
<option value="abc" >Test - 123</option>
<option value="def" >Test - 456</option>
<option value="ghi" >Test - 789</option>
EOF;

// Break the values into an array.
$vals = explode("\n", strip_tags($html));

Bahsettiğiniz gibi sadece bir kırık, DOMDocument sizinle yürüyelim ki gibi gerçek bir ayrıştırıcı kullanmak ettiyseniz DOMXPath.

Aksi takdirde birlikte bu normal bir ifade try preg_match_all:

<option(?:[^>"']+|"[^"]*"|'[^']*')*>([^<]+)</option>

http://networking.ringofsaturn.com/Web/removetags.php

preg_match_all("s/<[a-zA-Z\/][^>]*>//g", $data, $out);

Ben soruyu yanlış anlama yaşıyorum sürece strip_tags kullanma.

    $string = '<option value="abc" >Test - 123</option>
    <option value="def" >Test - 456</option>
    <option value="ghi" >Test - 789</option>';

    $string = strip_tags($string);

Update: Eğer gevşek Sorunuza bir dizi belirttiğiniz Kaçırılan. Bu durumda, ve ben temiz bir yöntem var eminim, ben böyle bir şey yapmak istiyorum:

$teststring = '<option value="abc" >Test - 123</option>
<option value="def" >Test - 456</option>
<option value="ghi" >Test - 789</option>';

$stringarray = split("\n", strip_tags($teststring));
print_r($stringarray);

Update 2: Ve sadece biz inanmak yanıltılmış olabilir gibi aslında (değil bir dizi sordu olarak sunmak için, o top ve kuyruk için, aşağıdakileri deneyin:

$teststring = '<option value="abc" >Test - 123</option>
<option value="def" >Test - 456</option>
<option value="ghi" >Test - 789</option>';

$stringarray = split("\n", strip_tags($teststring));

$newstring = join($stringarray, "','");
echo "'" . $newstring . "'\n";