2

我有这个字符串:

$str="http://ecx.images-amazon.com/images/I/418lsVTc0aL._SL110_.jpg";

是否有内置的php函数可以通过删除._SL110_.jpg部分来缩短它,这样结果将是:

http://ecx.images-amazon.com/images/I/418lsVTc0aL
4

7 回答 7

2

不,没有任何内置的 URL 缩短 php 函数,如果你想做类似的事情,你可以使用子字符串或创建一个生成短链接并将长和短值存储在数据库中某处的函数,并且只显示短的。

于 2012-11-23T14:52:35.630 回答
1

好吧,这取决于您是否需要正则表达式替换(如果您不知道完整的值),或者您是否可以执行如下简单的 str_replace:

$str = str_replace(".SL110.jpg", "", "http://ecx.images-amazon.com/images/I/418lsVTc0aL._SL110_.jpg");
于 2012-11-23T14:33:39.780 回答
1

您可以使用 preg_replace()。

例如preg_replace("/\.[^\.]+\.jpg$/i", "", $str);

于 2012-11-23T14:36:18.550 回答
0

不,它不是(至少不是直接的)。此类 URL 缩短器通常会生成唯一 ID 并记住您的原始 URL 和生成的 ID。当你输入这样的 url 时,你会启动一个脚本,它会查找给定的 ID,然后重定向到目标 URL。

如果您只想剪切字符串的某些部分,然后假设文件名格式如您所示,只需查找第一个点并substr()到那个地方。或者

$tmp = explode('.', $filename);
$shortName = $tmp[0];

如果后缀._SL110_.jpg总是在那里,那么就str_replace('._SL110_.jpg', '', $filename)可以工作。

编辑

以上只是文件名的示例。整个代码将是:

$url = "http://ecx.images-amazon.com/images/I/418lsVTc0aL._SL110_.jpg";
$urlTmp = explode('/', $url);
$fileNameTmp = explode( '.', $urlTmp[ count($urlTmp)-1 ] );

$urlTmp[ count($urlTmp)-1  ] = $fileNameTmp[0];
$newUrl = implode('/', $urlTmp );

printf("Old: %s\nNew: %s\n", $url, $newUrl);

给出:

Old: http://ecx.images-amazon.com/images/I/418lsVTc0aL._SL110_.jpg
New: http://ecx.images-amazon.com/images/I/418lsVTc0aL
于 2012-11-23T14:34:00.123 回答
0

我建议使用:

$tmp = explode("._", $str);

然后根据$tmp[0]您的目的使用,如果您确保要删除的部分始终由“._”(点下划线)符号分隔。

于 2012-11-23T14:37:59.677 回答
0

你可以这样做substr($data,0,strpos($data,"._")),如果你想要的是剥离“._”之后的所有内容

于 2012-11-23T15:05:04.050 回答
0

你可以试试

$str = "http://ecx.images-amazon.com/images/I/418lsVTc0aL._SL110_.jpg";
echo "<pre>";

一种。

echo strrev(explode(".", strrev($str), 3)[2]) , PHP_EOL;

B.

echo pathinfo($str,PATHINFO_DIRNAME) . PATH_SEPARATOR . strstr(pathinfo($str,PATHINFO_FILENAME),".",true), PHP_EOL;

C。

echo preg_replace(sprintf("/.[^.]+\.%s$/i", pathinfo($str, PATHINFO_EXTENSION)), null, $str), PHP_EOL;

输出

http://ecx.images-amazon.com/images/I/418lsVTc0aL

看演示

于 2012-11-23T15:11:39.233 回答