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

syd*_*ydo 3 php regex preg-replace

我想替换html文本的图像标记中的所有空格.

例:

<img src="photo 1.jpg" />
Run Code Online (Sandbox Code Playgroud)

至

<img src="photo%201.jpg"/>
Run Code Online (Sandbox Code Playgroud)

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

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

Jim*_* W. 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();
Run Code Online (Sandbox Code Playgroud)

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


BRa*_*sad 5

该空间由url中的%20表示,但是您可能希望为其他图像转换其他字符,因此您应该使用常规urlencode函数,而不是使用OP中所述的"简单正则表达式".

<img src="<?php echo urlencode('file name.jpg'); ?>"/>
Run Code Online (Sandbox Code Playgroud)

  • `urlencode()`将用'+'替换空格,`rawurlencode()`是适合目的的正确函数. (4认同)