Reputation: 15668
I have a html string and I want to extract a certain sub string as plain text that always starts at a defined position, how do I do this best?
the html looks like:
<table class="views-table cols-4"><thead><tr><th class="views-field views-field-line-item-title">
Title </th>
<th class="views-field views-field-commerce-unit-price">
Unit price </th>
<th class="views-field views-field-quantity">
Quantity </th>
<th class="views-field views-field-commerce-total views-align-right">
Total </th>
</tr></thead><tbody><tr class="odd views-row-first views-row-last"><td class="views-field views-field-line-item-title">
"Sweet Heart" Package (SPA02) </td>
<td class="views-field views-field-commerce-unit-price">
135.00 CAD </td>
<td class="views-field views-field-quantity">
1 </td>
<td class="views-field views-field-commerce-total views-align-right">
135.00 CAD </td>
</tr></tbody></table>
and I want to extract the string "Sweet Heart" Package (SPA02)
, how do I do this most efficiently?
Thanks
EDIT 1
I took Vinie's solution for a spin and just added the echo before the call to get_string()
but for some reason strpos() is not able to find $start
within $string
which is odd as I printed them both to the screen and I can see, the contents are definitely within the string!
<?php
function get_string($string, $start, $end)
{
$pos = 0;
$pos = strpos($string, $start, $pos);
if ($pos === false)
{ // Zero is not exactly equal to false...
return $found;
}
$pos += strlen($start);
$len = strpos($string, $end, $pos)-$pos;
$found = substr($string, $pos, $len);
return $found;
}
$str='<table class="views-table cols-4"><thead><tr><th class="views-field views-field-line-item-title">
Title </th>
<th class="views-field views-field-commerce-unit-price">
Unit price </th>
<th class="views-field views-field-quantity">
Quantity </th>
<th class="views-field views-field-commerce-total views-align-right">
Total </th>
</tr></thead><tbody><tr class="odd views-row-first views-row-last"><td class="views-field views-field-line-item-title">
"Sweet Heart" Package (SPA02) </td>
<td class="views-field views-field-commerce-unit-price">
135.00 CAD </td>
<td class="views-field views-field-quantity">
1 </td>
<td class="views-field views-field-commerce-total views-align-right">
135.00 CAD </td>
</tr></tbody></table>';
$str=strtr($str,array("<"=>"<","&"=>"&"));
echo get_string($str,'class="odd views-row-first views-row-last"><td class="views-field views-field-line-item-title">','</td>');
?>
Upvotes: 0
Views: 70
Reputation: 2993
Use this function to extract your string.
function get_string($string, $start, $end)
{
$pos = 0;
$pos = strpos($string, $start, $pos);
if ($pos === false)
{ // Zero is not exactly equal to false...
return $found;
}
$pos += strlen($start);
$len = strpos($string, $end, $pos)-$pos;
$found = substr($string, $pos, $len);
return $found;
}
$str='<table class="views-table cols-4"><thead><tr><th class="views-field views-field-line-item-title">
Title </th>
<th class="views-field views-field-commerce-unit-price">
Unit price </th>
<th class="views-field views-field-quantity">
Quantity </th>
<th class="views-field views-field-commerce-total views-align-right">
Total </th>
</tr></thead><tbody><tr class="odd views-row-first views-row-last"><td class="views-field views-field-line-item-title">
"Sweet Heart" Package (SPA02) </td>
<td class="views-field views-field-commerce-unit-price">
135.00 CAD </td>
<td class="views-field views-field-quantity">
1 </td>
<td class="views-field views-field-commerce-total views-align-right">
135.00 CAD </td>
</tr></tbody></table>';
$str=strtr($str,array("<"=>"<","&"=>"&"));//echo $str;
get_string($str,'class="odd views-row-first views-row-last"><td class="views-field views-field-line-item-title">','</td>');
Upvotes: 1