2009-07-12 16 views
6

से डेटा पट्टी है मैं इस तरह डेटा है कहते हैं:मैं कैसे HTML टैग

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

पीएचपी का उपयोग करना, कैसे होगा मैं इन सबसे HTML टैग के माध्यम से, विकल्प मूल्यों के भीतर से सभी पाठ लौटने। उदाहरण के लिए, ऊपर दिए गए कोड को देखते हुए, मैं 'टेस्ट - 123', 'टेस्ट - 456', 'टेस्ट - 78 9' वापस करना चाहता हूं।

सहायता के लिए धन्यवाद!

अद्यतन: तो यह है कि मैं और अधिक स्पष्ट हूँ - मैं filegetcontents उपयोग कर रहा हूँ() एक साइट से एचटीएमएल मिलता है। मेरे उद्देश्यों के लिए, मैं एचटीएमएल के माध्यम से सॉर्ट करने, विकल्प मान खोजने और उन्हें आउटपुट करने में सक्षम होना चाहता हूं। इस मामले में, 'टेस्ट - 123', 'टेस्ट - 456', आदि

+0

अन्यथा preg_match_all के साथ मिलकर इस नियमित अभिव्यक्ति की कोशिश इसे एक सरणी के रूप में वापस करें? –

उत्तर

0

हम regex सामान कर रहे हैं, मुझे पसंद है:

$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");' 
+4

विकल्प तत्व की मान विशेषता को सीडीएटीए के रूप में परिभाषित किया गया है। अगर मुझे गलत नहीं है जो HTML 4.01 (validator.w3.org सहमत) में <विकल्प value = "> abc" की अनुमति देता है। आपका कोड तब 'एबीसी'> टेस्ट - 123 'प्रिंट करता है। – VolkerK

+0

हां, यह करता है :-) नियमित अभिव्यक्तियों के साथ कुछ सरल लिखना आसान होता है जो आम उपयोग के मामलों (और पढ़ने के लिए भी पूर्व) को संभालता है, लेकिन ऐसा कुछ लिखना बहुत मुश्किल है जो एक्सएमएल की तरह एक संरचित भाषा को सही ढंग से पार्स करता है। यदि आपको सख्त "कुछ भी उस पर फेंकने की ज़रूरत है" पार्सर, कुछ ऐसा करें जो डीओएम या एसएक्स जैसी भाषा को समझता है। नकारात्मकता यह है कि साधारण मामलों के लिए डोम और एसएएक्स लिखना कठिन होता है और पढ़ने के लिए कठिन होता है। – Guss

0

strip_tags का उपयोग करके जब तक मैं इस प्रश्न को गलत समझ नहीं पा रहा हूं।

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

    $string = strip_tags($string); 

अद्यतन: छूटी है कि आप शिथिल अपने प्रश्न में एक सरणी निर्दिष्ट करें।

$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); 

अद्यतन 2: और जैसा कि आप मूल रूप से कहा कि सिर्फ शीर्ष पर और पूंछ, यह पेश करने के लिए नहीं है (इस मामले में, और मैं वहाँ एक क्लीनर विधि, मैं की तरह कुछ करना चाहते हैं यकीन एक सरणी के रूप में हम विश्वास करने के लिए गुमराह किया गया हो सकता है, की कोशिश निम्नलिखित:

$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"; 
1

इस कोड को एक सरणी में मानों लोड होता है, यह सोचते हैं आप लाइन विकल्प टैग के बीच में टूट जाता है जैसे आप से पता चला है:

// 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)); 
3

कई तरीके हैं, जो आपके प्रश्न में प्रदान किए गए मुकाबले ज्यादा जानकारी पर निर्भर करता है।
एक संभावना: 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"; 
} 

प्रिंट

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

तुम सिर्फ उल्लेख एक की तरह एक फ्रैक्चर, DOMDocument की तरह एक असली पार्सर कि आप DOMXPath साथ के माध्यम से चल सकता है का उपयोग नहीं किया है, तो। इस पर्ल की तरह वाक्यविन्यास

<option(?:[^>"']+|"[^"]*"|'[^']*')*>([^<]+)</option> 
संबंधित मुद्दे