php查找并替换字符串中的字符串

时间:2014-02-26 15:27:52

标签: php html

我正在尝试通过字符串扫描特定标签,并用格式正确的html替换它们。 例如,我想用

替换图像ID

到目前为止我有这个扫描字符串并返回一个包含标签内的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'].'" />';
}

$ string

的例子
  

字符串的示例将是这样的一些文本   然后是图像
  <img>1</img>
  还有一些文字

所以我现在有了这个id的数组,可用于从数据库获取图像src宽度高度。但无法弄清楚如何用新标签替换旧标签。

我可以使用for循环来格式化数组中的每个条目,但是如何在字符串中的正确位置用新格式化的文本替换标记。

1 个答案:

答案 0 :(得分: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()返回一个包含info的数组,但您可以更改它并使其返回整个图像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代码脚本。他们的工作方式相似