2014-02-26 147 views
0

我想掃描特定標記的字符串並將其替換爲格式正確的HTML。 例如我想與PHP找到並替換字符串中的字符串

替換圖像ID我有這到目前爲止,其掃描字符串並返回包含標籤示例$串的

function get_image($string, $start, $end) { 
    $start = preg_quote($start, '|'); 
    $end = preg_quote($end, '|'); 
    $matches = preg_match_all('|'.$start.'([^<]*)'.$end.'|i', $string, $output); 
    return $matches > 0 
     ? $output[1] 
     : array(); 
} 

$output = get_image($string,'<img>','</img>'); 
for($x = 0; $x < count($output); $x++){ 
    $id = mysqli_real_escape_string($con,$output[$x]); 
    $sql = "SELECT * FROM images WHERE image_id = '$id'"; 
    $query = mysqli_query($con,$sql); 
    $result = mysqli_fetch_assoc($query); 
    $replacement = '<img src="'.$result['img_src'].'" width="'.$result['img_width'].'" height="'.$result['img_height'].'" />'; 
} 

內的ID的數組

字符串的示例將是這樣的一些文本
後面是圖像
<img>1</img>
還有一些t分機

所以我現在有這個ID的數組可以用來從數據庫中獲取圖像的src寬度高度。但不能解決如何用新標籤替換舊標籤。

我可以使用for循環來格式化數組中的每個條目,但是如何將字符串中正確位置的新格式化文本替換爲標記。

+0

嘗試「/ $開始([^ <] +)$結束/我」爲正則表達式。並替換通過<\/img> –

+0

給出一個$ string的值的示例 –

+0

我已經添加了一個示例字符串的外觀,它使用帶有最少文本編輯選項的textarea生成。它只是我似乎無法弄清楚 –

回答

1

可以使用preg_replace_callback()使用這樣的事情:

// Get info of image $id 
function getImageById($id){ 
    $sql = "SELECT * FROM images WHERE image_id = '$id'"; 
    return mysqli_query($con,$sql)->fetch_assoc(); 
} 
// Proccess the info the regex gives and wants 
function getImageById_regex($matches){ 
    // Some function to get the src by the id 
    $img = getImageById($matches[1]); 
    return '<img src="'.$img['src'].'" alt="'.$img['alt'].'" />'; 

} 
// The actual magic: 
$string = preg_replace_callback("/<img>(.*?)<\/img>/", "getImageById_regex", $string); 

在這個版本的getImageById()返回與信息數組,但你可以改變它,讓它返回整個圖片的HTML。

可以改進:

// The actual magic, but first use a fast method to check if the slow regex is needed: 
if(strpos($string, '<img>')!==false){ 
    $string = preg_replace_callback("/<img>(.*?)<\/img>/", "getImageById_regex", $string); 
} 

提示:到處尋找一些BB代碼的腳本。他們的工作類似

+0

這太好了,它絕對格式化正確的字符串,但mysqli沒有返回 –

+1

$ matches [0]應改爲$ matches [1] –