【问题标题】:Remove parameters being added to img tag删除添加到 img 标签的参数
【发布时间】:2019-05-17 14:13:06
【问题描述】:

我有下面的图片,我想删除 jpg 之后的所有内容 (?resize=495%2C371&ssl=1)

https://i1.wp.com/atalantadigital.com/wp-content/uploads/2016/11/sampleimg.jpg?resize=495%2C371&ssl=1

我试过了:

preg_match_all('/<img[^>]+>/i', $images);

foreach ($images[0] as $image) {
 str_replace('?resize=495%2C371&ssl=1', ' ', $image);
}

我需要修复一些添加了这些参数的图像。我对 php 或 javascript 解决方案持开放态度,在此先感谢!

我搜索了stackoverflow并没有找到答案。

【问题讨论】:

  • 我们是否可以假设所有属性之间会有一个空格,并且任何属性的值都不会包含双引号或大于/小于符号?
  • $e=explode('?',$url); echo $e[0];

标签: javascript php wordpress


【解决方案1】:

Javascript 非常适合这项任务,因为我们可以通过img.src 轻松选择所有img 标记以及src 属性。

这将从页面上的 img src url 中删除所有查询字符串(? 及其后的任何内容)。

// searches for all images on page
let images = document.getElementsByTagName("img")
// for each image
for (let img of images) {
    // replace source query string with nothing
    img.src = img.src.replace(/\?.+$/, "")
}

正则表达式解释:

\? 匹配文字 ?

.+$ 匹配它之后的所有内容,直到输入结束

以下显示了正则表达式的工作:

let img = new Image;
img.src = 'https://i1.wp.com/atalantadigital.com/wp-content/uploads/2016/11/sampleimg.jpg?resize=495%2C371&ssl=1';

img.src = img.src.replace(/\?.+$/, "");

console.log(img.src);

【讨论】:

    【解决方案2】:

    如果

    var imgName = 'https://i1.wp.com/atalantadigital.com/wp-content/uploads/2016/11/sampleimg.jpg?resize=495%2C371&ssl=1'
    

    那么你就可以得到你想要的

    imgName.substring(0, imgName.indexOf('?'))
    

    【讨论】:

    • 谢谢,但是这个修复需要针对任何带有这些参数的图像......不仅仅是那个特定的。
    • 这适用于任何图像。这 ?总是在 url 之后,这会在 ?.
    【解决方案3】:

    不确定我是否理解正确,但据我了解,您有:

    • 一个包含&lt;img src="image_url.jpg/?resize=495%2C371&amp;ssl=1"&gt; 一次或多次的字符串。

    如果是这样,这应该可以解决问题(几乎和你做的一样):

    $images = "<img src='https://sampleimg.jpg?resize=495%2C371&ssl=1'><img src='https://sampleimg.jpg?resize=495%2C371&ssl=1'>";
    preg_match_all('/img[^>]+>/i', $images, $matches);
    
    foreach ($matches[0] as $image) {
        echo $image;    // "<img src="image_url.jpg/?resize=495%2C371&ssl=1">"
        $image = str_replace('?resize=495%2C371&ssl=1', ' ', $image);    
        echo $image;    // "<img src="image_url.jpg">"
    }
    

    希望对您有所帮助!

    【讨论】:

      【解决方案4】:

      如果您使用的是 W3 Total Cache 插件,则可以取消选中某个选项以避免创建查询字符串。可以通过导航到 W3 插件性能选项卡 > 浏览器缓存 找到此选项。在此页面的“常规”部分中,有一个名为“设置更改后防止对象缓存”的选项。

      默认情况下取消选择此选项,但如果出于任何原因启用它,只需取消选择它并保存您的设置以防止创建查询字符串

      【讨论】:

      • 他们使用 Jetpack 进行缓存,但如果它有这个选项会很棒。
      猜你喜欢
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多