首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >preg_replace_callback -我需要这个来忽略重复的URL中的空格。

preg_replace_callback -我需要这个来忽略重复的URL中的空格。
EN

Stack Overflow用户
提问于 2012-06-18 06:26:01
回答 1查看 198关注 0票数 0

这是我用来解析url的当前代码,它适用于MySQL中的所有查询,直到命中URL中的空格。然后它就像这样把东西分开。

http://domain.com/1.jpg

http://domain.com/1 http://(1).jpg

我需要解决这个问题。

代码语言:javascript
复制
<?php
$con = mysql_connect("localhost","----","----");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("----", $con);

$result = mysql_query("SELECT * FROM posts ORDER BY postid DESC");

while($row = mysql_fetch_array($result))
  {

$str = $row['post_content'];

$str = preg_replace_callback('#(?:https?://\S+)|(?:www.\S+)|(?:\S+\.\S+)#', function($arr)
{
    if(strpos($arr[0], 'http://') !== 0)
    {
        $arr[0] = 'http://' . $arr[0];
    }

    $url = parse_url($arr[0]);

    // images
    if(preg_match('#\.(png|jpg|gif)$#', $url['path']))
    {
        return '<img src="'. $arr[0] . '" />';
    }
    // youtube
    if(in_array($url['host'], array('www.youtube.com', 'youtube.com'))
      && $url['path'] == '/watch'
      && isset($url['query']))
    {
        parse_str($url['query'], $query);
        return sprintf('<iframe class="embedded-video" src="http://www.youtube.com/embed/%s" allowfullscreen></iframe>', $query['v']);
    }
    //links
    return sprintf('<a href="%1$s">%1$s</a>', $arr[0]);
}, $str);

echo $str;
echo "<br />";
}

mysql_close($con);
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-18 06:42:04

Url中不应该有空格。参见Spaces in URLs?。一个简单的解决办法是在preg_match之前对其进行url编码。

您应该对内容进行urlencode,但是既然您已经存储了它,请尝试这样做

代码语言:javascript
复制
$str = str_replace(' ', '%20', $str);

$str = preg_replace_callback('#(?:https?://\S+)|(?:www.\S+)|(?:\S+\.\S+)#', function($arr)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11075283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档