0

我的朋友 opencart 页面上的 W3 Validator 出现错误:

元素 img 上属性 src 的错误值http://myserver.com/cache/data/product/MY PRODUCT/product1-290x214.JPG:路径组件中的空格。使用 %20 代替空格。

这表明用户创建了带有空格的文件夹(我的产品)。

需要修改代码以将文件夹名称中的空格转换为 %20?

4

6 回答 6

2

虽然urlencode()是您应该使用的那个,但您应该在这里做的事情是教育您的朋友不要再这样做,重命名它以使其没有空间并更新数据库中的路径。如果您想要一个解决方案,可以在您的购物车中的所有页面上纠正此问题,您可以使用urlencode()str_replace()在您的/catalog/modl/tool/image.php文件中

        $new_image = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;

将需要更改,要么在其后添加一行以添加%20,要么编辑该行以将其包含在一行中。当然,您也应该在 vQmod 中执行此操作,而不仅仅是编辑您的核心文件,以便在您朋友的站点更新到新版本时保留它

编辑

如果上面的代码不起作用,您可以在直接构建返回的 URL 后对其进行操作。这是两个返回行(第一个用于 HTTPS 图像,第二个用于 HTTP)

        return HTTPS_IMAGE . $new_image;
    } else {
        return HTTP_IMAGE . $new_image;
于 2012-12-23T23:34:09.243 回答
2

使用urlencode。这将解决问题。

于 2012-12-23T22:36:06.563 回答
2

如果您有完整的 URL,一个简单的str_replace()应该可以解决问题。像这样的东西:

echo str_replace(' ','%20',$full_link);

否则,您可以按照一位评论者的建议使用urlencode()。如果您已经拥有该站点的路径并且只是添加类似产品名称的内容,这将非常有用:

echo 'http://site.name/hello/'.urlencode($product);
于 2012-12-23T22:36:43.577 回答
0

如果您在文件夹名称或图像文件名中有空格,Opencart 图像调整大小模型实际上会返回带有空格的图像路径。

尝试使用rationalboss建议的解决方法编辑catalog/model/tool/image.php最后几行:

return $this->config->get('config_ssl') . 'image/' . str_replace(' ','%20', $new_image);

return $this->config->get('config_url') . 'image/' . str_replace(' ','%20', $new_image);

Opencart 仍然上传带有空格、UTF-8 字符等的图像。我认为,这必须在下一个 Opencart 版本中修复。

于 2013-04-14T22:05:46.270 回答
0

简单的解决方案是编辑目录/模型/工具/image.php

    if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
        return $this->config->get('config_ssl') . 'image/' . str_replace(' ','%20', $new_image);
    } else {
        return $this->config->get('config_url') . 'image/' . str_replace(' ','%20', $new_image);
    }
于 2014-03-24T12:21:36.307 回答
0

在您的 /catalog/model/tool/image.php 文件之后

$new_image = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . $type .'.' . $extension;

添加

$new_image = implode('/', array_map('rawurlencode', explode('/', $new_image)));
于 2015-02-01T19:23:32.920 回答