เช่นให้ php ดึงข้อความมาว่า
thaiseoboard<table><tr><td>0000000000000</td></tr></table>
เสียววุ้ย<table><tr><td>9999999999999</td></tr></table>
เสียวอีกแระ<table><tr><td>111111111</td></tr></table>
ข้อความต่อไป<table><tr><td>...โค๊ด.....</td></tr></table>
.....
ปล.ในการดึงข้อความแต่ละครั้งจะไม่เหมือนกันนะครับ
ประมาณนี้ไปเรื่อยๆ
และผมจะให้มันลบเหลือ
thaiseoboard
เสียววุ้ย
ข้อความต่อไป
...
สรุปคือสั่งลบตั้งแต่ <table> จนจบถึง </table>
ถ้าแบบง่าย ๆ ถึก ๆ นะครับ
1. ใช้ str_replace เปลี่ยน <table> เป็น , (คอมม่า)
2. แล้วสร้างไพล์ temp ขึ้นมา (กำหนดนามสกุลให้เป็น .csv [หรือไม่ก็ได้]) fput ที่ข้อมูลที่เปลี่ยนแล้ว
3. ใช้ getcsv อ่านไฟล์ที่ได้ในข้อ 2 แล้ว เอามาใช้แค่ตัวแรก
4. ลบไฟล์ temp ออก
5. จบ
เข้าใจป่ะครับ
test test
<?
//header("Content-type: text/plain");
$test = <<< HTML
thaiseoboard<table><tr><td>0000000000000</td></tr></table>
เสียววุ้ย<table><tr><td>9999999999999</td></tr></table>
เสียวอีกแระ<table><tr><td>111111111</td></tr></table>
ข้อความต่อไป<table><tr><td>...โค๊ด.....</td></tr></table>
HTML;
$regex = "|(.*)<table><tr><td>.*</td></tr></table>\s?|";
preg_match_all($regex,$test,$match);
print_r($match);
?>
output
Array
(
[0] => Array
(
[0] => thaiseoboard<table><tr><td>0000000000000</td></tr></table>
[1] => เสียววุ้ย<table><tr><td>9999999999999</td></tr></table>
[2] => เสียวอีกแระ<table><tr><td>111111111</td></tr></table>
[3] => ข้อความต่อไป<table><tr><td>...โค๊ด.....</td></tr></table>
)
[1] => Array
(
[0] => thaiseoboard
[1] => เสียววุ้ย
[2] => เสียวอีกแระ
[3] => ข้อความต่อไป
)
)
พอเข้าใจป่ะคับ
พอเวลาเอาไปใช้ ข้อความที่คุณต้องการจะอยู่ใน array $match[1]
และก็รอให้เอาไปต้มยำทำแกงต่อไป
ลองดูตัวอย่างละกันคับ ไม่เข้าใจตรงไหนลองถามดูคับ ถ้าไม่เหลือบ่ากว่าแรงจะช่วยตอบ
str_replace ง่ายสุดแล้วละครับ
:D
อ้างถึงจาก: ball6847 ใน 16 พฤษภาคม 2008, 21:34:41
test test
<?
//header("Content-type: text/plain");
$test = <<< HTML
thaiseoboard<table><tr><td>0000000000000</td></tr></table>
เสียววุ้ย<table><tr><td>9999999999999</td></tr></table>
เสียวอีกแระ<table><tr><td>111111111</td></tr></table>
ข้อความต่อไป<table><tr><td>...โค๊ด.....</td></tr></table>
HTML;
$regex = "|(.*)<table><tr><td>.*</td></tr></table>\s?|";
preg_match_all($regex,$test,$match);
print_r($match);
?>
output
Array
(
[0] => Array
(
[0] => thaiseoboard<table><tr><td>0000000000000</td></tr></table>
[1] => เสียววุ้ย<table><tr><td>9999999999999</td></tr></table>
[2] => เสียวอีกแระ<table><tr><td>111111111</td></tr></table>
[3] => ข้อความต่อไป<table><tr><td>...โค๊ด.....</td></tr></table>
)
[1] => Array
(
[0] => thaiseoboard
[1] => เสียววุ้ย
[2] => เสียวอีกแระ
[3] => ข้อความต่อไป
)
)
พอเข้าใจป่ะคับ
พอเวลาเอาไปใช้ ข้อความที่คุณต้องการจะอยู่ใน array $match[1]
และก็รอให้เอาไปต้มยำทำแกงต่อไป
ลองดูตัวอย่างละกันคับ ไม่เข้าใจตรงไหนลองถามดูคับ ถ้าไม่เหลือบ่ากว่าแรงจะช่วยตอบ
ในตอนเรียกใช้อะครับทำไงอะ "พอเวลาเอาไปใช้ ข้อความที่คุณต้องการจะอยู่ใน array $match[1]"
เอาไป echo $match[1] ได้เลยไมครับ
อ้างถึงจาก: ThaNaButS ใน 16 พฤษภาคม 2008, 21:45:59
ในตอนเรียกใช้อะครับทำไงอะ "พอเวลาเอาไปใช้ ข้อความที่คุณต้องการจะอยู่ใน array $match[1]"
เอาไป echo $match[1] ได้เลยไมครับ
ไม่ได้คับ เพราะว่า $match[1] ยังเป็น array อยู่คับ หากต้องการเข้าถึงค่าที่เก็บอยู่ใน array ถ้าไม่ใช้ foreach ก็ต้องเข้าถึงแบบระบุ คีย์คับ
สมมุติ
<?php
//header("Content-type: text/plain");
$test = file_get_contents('http://domain.com/iwillget.php');
$regex = "|(.*)<table><tr><td>.*</td></tr></table>\s?|";
preg_match_all($regex,$test,$match);
$msg = $match[1];
echo $msg[0];
echo $msg[1];
echo $msg[2];
echo $msg[3];
// or foreach
foreach($msg as $text)
{
echo $text;
}
?>
ลองดูจากโค้ดข้างบนคือ ที่ echo ทีแรก คือแบบระบุคีย์ (ก่อนนั้นผมเก็บค่าที่ match มาไว้ใน $msg ก่อน เพื่อให้ไม่งง เพราะงั้น $msg ก็ยังเป็น array อยู่นะคับ)
สมมุตผมต้องการเข้าถึง ค่าตัวที่ 1 ที่เก็บไว้ใน array $msg ผมก็จะเข้าถึงโดย $msg[0]
ค่าใน array ตัวที่ 2 ก็จะเข้าถึงโดย $msg[1] ... เป็นอย่างงี้เรื่อยๆไปจนสมาชิกตัวสุดท้ายอ่ะคับ
เพราะงั้น จากตัวอย่าง
echo $msg[0]; <== สั่งให้แสดง "thaiseoboard"
echo $msg[1]; <== สั่งให้แสดง "เสียววุ้ย"
echo $msg[2]; <== สั่งให้แสดง "เสียวอีกแระ"
echo $msg[3]; <== สั่งให้แสดง "ข้อความต่อไป"
หวังว่าน่าจะเข้าใจนะคับ :P
กับอีกแบบที่เราต้องการ เข้าถึงทุกสมาชิกใน array เลย เราจะใช้ foreach
foreach($msg as $text) <== หมายถึง เก็บแต่ละสมาชิกใน $msg เป็น $text
{
echo $text; <== สั่งให้แสดง $text แต่ละตัว ซึ่งแต่ละรอบก็จะเป็นสมาชิกแต่ละตัวของ $msg
}
จะเข้าใจมั้ยเนี่ย
ปล. ต้องขอโทษก่อนที่ต้องอธิบายยาว เพราะ อยากให้เข้าใจมากกว่าการทำให้ดูเป้นเคสๆ ไปอ่ะคับ
จะทำอะไรให้ยุ่งยากล่ะครับ
<?php
$txt = 'thaiseoboard<table><tr><td>0000000000000</td></tr></table>
เสียววุ้ย<table><tr><td>9999999999999</td></tr></table>
เสียวอีกแระ<table><tr><td>111111111</td></tr></table>
ข้อความต่อไป<table><tr><td>...โค๊ด.....</td></tr></table>';
echo preg_replace('/<table>(.*)?<\/table>/','',$txt);
?>
ลองดู
;D
สงสัยผมจะทำให้ยุงยากจิงๆด้วย :P
เอาแบบง่ายๆก็ได้คับ :P
อ้างถึงจาก: monster ใน 16 พฤษภาคม 2008, 22:14:22
จะทำอะไรให้ยุ่งยากล่ะครับ
<?php
$txt = 'thaiseoboard<table><tr><td>0000000000000</td></tr></table>
เสียววุ้ย<table><tr><td>9999999999999</td></tr></table>
เสียวอีกแระ<table><tr><td>111111111</td></tr></table>
ข้อความต่อไป<table><tr><td>...โค๊ด.....</td></tr></table>';
echo preg_replace('/<table>(.*)?<\/table>/','',$txt);
?>
ลองดู
;D
สั้น ๆ แต่ถ้าคนไม่เข้าใจนี่ยากเลยนะครับ คงต้องเพิ่มอีกเยอะเลย มันตัดไห้ไม่หมด
:D
<?php
$txt = 'thaiseoboard<table><tr><td>0000000000000</td></tr></table>
เสียววุ้ย<table><tr><td>9999999999999</td></tr></table>
เสียวอีกแระ<table><tr><td>111111111</td></tr></table>
ข้อความต่อไป<table><tr><td>...โค๊ด.....</td></tr></table>
ข้อความกับลิงค์<table><tr><td><a href="http://www.google.com">...โค๊ด.....</a></td></tr></table>';
echo preg_replace('#(<[^>]+>)+([^<])+(</[^>]+>)+#','',$txt);
?>
:P
ปล. ไปเรียนแระ สัปดาห์หน้าปิดเทอมแว้ว :D (แต่ปิดแค่ 2 สัปดาห์ บ้าจัง - -*)
ไม่แน่ใจในวัตถุประสงค์ครับ ไม่รู้ว่า จขกท. ต้องการตัดเฉพาะ <table>...</table> หรือตัด html ทิ้งให้หมด เหลือแต่ text ล่ะครับ
ลองดูตัวอย่าง robots ที่เขียนมาแบบลวก ๆ ของผมละกันครับ เป็นตัวอย่างการดึงหัวข้อโพสล่าสุดในบอร์ดนี้ ;D
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Robots</TITLE>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</HEAD>
<BODY>
<?php
$url = 'http://www.thaiseoboard.com'; //กำหนด url เป้าหมาย
//ดึงข้อมูลหน้าเพจเป้าหมาย
$oh = curl_init();
curl_setopt($oh, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($oh, CURLOPT_URL, $url);
$data = curl_exec($oh);//ข้อมูลหน้าเพจจะถูกเก็บในตัวแปร data
curl_close($oh);
$num = preg_match_all("/<td valign=\"top\">([^`]*?)<\/td>/",$data,$idata);//ดึงข้อมูลที่อยู่ระหว่าง <td valign="top">.....</td>
for($i=0; $i<=$num-1; $i++){ //วน loop เพื่อเก็บข้อมูลทั้งหมด
$txt = $idata[0][$i];
$txt = strip_tags($txt); //ตัด html tag ออกทั้งหมดให้เหลือเพียง text
$txts .= $txt.'<br>'; //นำ array มารวมกันเป็นตัวแปรเดียว
}
echo $txts; //แสดงผล
?>
</BODY>
</HTML>
ไม่รู้ว่าจะตรงกับความต้องการรึเปล่านะ
striptags ::)
อ้างถึงจาก: monster ใน 17 พฤษภาคม 2008, 11:22:38
ไม่แน่ใจในวัตถุประสงค์ครับ ไม่รู้ว่า จขกท. ต้องการตัดเฉพาะ <table>...</table> หรือตัด html ทิ้งให้หมด เหลือแต่ text ล่ะครับ
ลองดูตัวอย่าง robots ที่เขียนมาแบบลวก ๆ ของผมละกันครับ เป็นตัวอย่างการดึงหัวข้อโพสล่าสุดในบอร์ดนี้ ;D
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Robots</TITLE>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</HEAD>
<BODY>
<?php
$url = 'http://www.thaiseoboard.com'; //กำหนด url เป้าหมาย
//ดึงข้อมูลหน้าเพจเป้าหมาย
$oh = curl_init();
curl_setopt($oh, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($oh, CURLOPT_URL, $url);
$data = curl_exec($oh);//ข้อมูลหน้าเพจจะถูกเก็บในตัวแปร data
curl_close($oh);
$num = preg_match_all("/<td valign=\"top\">([^`]*?)<\/td>/",$data,$idata);//ดึงข้อมูลที่อยู่ระหว่าง <td valign="top">.....</td>
for($i=0; $i<=$num-1; $i++){ //วน loop เพื่อเก็บข้อมูลทั้งหมด
$txt = $idata[0][$i];
$txt = strip_tags($txt); //ตัด html tag ออกทั้งหมดให้เหลือเพียง text
$txts .= $txt.'<br>'; //นำ array มารวมกันเป็นตัวแปรเดียว
}
echo $txts; //แสดงผล
?>
</BODY>
</HTML>
ไม่รู้ว่าจะตรงกับความต้องการรึเปล่านะ
55+รู้ได้ไงอะคับ
ขอขอบคุณทุกคำตอบมิตรภาพทั้งนั้น
หุหุช่วยอีกหน่อยนะครับ
okfsdfsdfofdsfsokok|#@|abc123
อบากให้มันตัดเหลือแค่ abc123
ปล. okfsdfsdfofdsfsokok รูปแบบไม่เหมือนกัน
$var = 'okfsdfsdfofdsfsokok|#@|abc123';
$arr = explode("|", $var);
echo end($arr);