缩短特定字符串的功能

时间:2012-11-23 14:29:27

标签: php string

我有这个字符串:

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

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

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

7 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

嗯,这取决于你是否需要regexp替换(如果你不知道完整的值)或者你是否可以做一个简单的str_replace,如下所示:

$str = str_replace(".SL110.jpg", "", "http://ecx.images-amazon.com/images/I/418lsVTc0aL._SL110_.jpg");

答案 2 :(得分:1)

您可以使用preg_replace()。

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

答案 3 :(得分:0)

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

如果您只想剪切字符串的某些部分,那么假设该文件名格式如您所示,只需查找第一个点和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

答案 4 :(得分:0)

我建议使用:

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

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

答案 5 :(得分:0)

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

答案 6 :(得分: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;

下进行。

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

输出

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

See Demo