如何在<img/>标记中用%20替换空格

时间:2011-06-01 17:48:36

标签: php regex preg-replace

我想替换html文本的图片代码中的所有空格。

示例:

<img src="photo 1.jpg" />

<img src="photo%201.jpg"/>

我没有找到preg_replace的灵魂,但它可能是一个简单的正则表达式。 谢谢!

编辑:对不起,伙计,我的描述不太清楚。所以,我有一个完整的html页面,我只想替换img标签内部。我不能在这里使用urlencode,因为它也会对其他内容进行编码。

5 个答案:

答案 0 :(得分:7)

修改

我可能错过了这一点,如果你没有扫描已经写完的HTML,这可能不适合你。这是因为如果你因为某种原因而废弃它。我将它留给纯粹的怀旧之情,因为它可以帮助其他想要刮擦和更换的人。对不起,感到困惑。


由于您知道标签和属性,我建议您查看PHP DOM来执行此操作。正则表达式可以做到这一点,但鉴于您正在考虑的上下文,DOM将是首选,可能更容易/更可靠。这将扫描生成的HTML并允许您替换属性内的项目(在本例中为src),使用rawurlencode()可以将空格转换为%20。

<?php
$dom = new DOMDocument();
// $dom->load('test.html'); // if in a file
$dom->loadHTML($html); // if in a string

for ($i=0; $i<$dom->getElementsByTagName('img')->length; $i++) {
    $encoded = implode("/", array_map("rawurlencode",
         explode("/", $dom->getElementsByTagName('img')
                    ->item($i)->getAttribute('src'))));

    $dom->getElementsByTagName('img')
            ->item($i)
            ->setAttribute('src',$encoded);
}


echo $dom->saveHTML();

处理我的小测试文件,只是一个如何完成它的例子:)

答案 1 :(得分:5)

空格在网址中以%20表示,但是您可能希望为其他图像转换其他字符,因此您应该使用常规的urlencode函数,而不是使用OP中所述的“简单正则表达式”

<img src="<?php echo urlencode('file name.jpg'); ?>"/>

答案 2 :(得分:4)

这就是您所需要的rawurlencode();

php.net/rawurlencode

答案 3 :(得分:2)

嘿 我找到了一个简单的解决方案,使用preg_replace_callback。我以前从未听说过这个功能,但它很棒。

在此处发布代码:

$text = preg_replace_callback("/src=[\'\"](.*?)[\'\"]/", "removeSpaces", $text);
function removeSpaces($matches) {
  return "src='" . str_replace(" ", "%20", $matches[1]) . "'";
}

感谢所有回复。

答案 4 :(得分:1)

以下内容可能有效:

$img_src = 'images/some crazy image.jpg';
$img_src = preg_replace('/ /g', '%20', $img_src);
echo '<img src="' . $img_src . '" alt="some image" />';

但是有点难以分辨,因为你没有向我们提供有关为什么preg_replace不起作用,输出是什么等等的任何细节。