dtvhqlc57127 2012-05-31 08:37
浏览 62
已采纳

url截断链接模块或pagepeeker格式化程序问题在drupal 7中

I have drupal 7 question that may involve some php help. I have created an rss feed from google alerts that I am mapping into fields. I have had success mapping into all the fields except the link module field where I have put a field formatter that creates a pagepeeker screenshot by attaching the appropriate url server query to the feeds url. Feeds is doing its job by taking the Item URL (link) and putting it into the field correctly. I am having an issue with with either pagepeeker or link module because below keeps happening.

To recap-

Google Alert feed -> Link module field -> pagepeeker screenshot formatter

here's the error

The url that google alerts provides is

http://www.google.com/url?sa=X&q=http://www.beautyjunkiesunite.com/WP/2012/05/30/whats-new-anastasia-beverly-hills-lash-genius/&ct=ga&cad=CAcQARgAIAEoATAAOABA3t-Y_gRIAlgBYgVlbi1VUw&cd=F7w9TwL-6ao&usg=AFQjCNG2rbJCENvRR2_k6pL9RntjP66Rvg

When the link is displayed I get :

http://pagepeeker.com/thumbs.php?size=m&url=www.google.com/url

Its cutting the url at url and not getting the rest of the url.

Here's the code that pagepeeker uses to parse the url ?

<?php

function _pagepeeker_format_url($url, $domain_only = FALSE) {
if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
return FALSE;
}

// try to parse the url
$parsed_url = parse_url($url);
if (!empty($parsed_url)) {
  $host = (!empty($parsed_url['host'])) ? $parsed_url['host'] : '';
  $port = (!empty($parsed_url['port'])) ? ':' . $parsed_url['port'] : '';
  $path = (!empty($parsed_url['path'])) ? $parsed_url['path'] : '';
  $query = (!empty($parsed_url['query'])) ? '?' . $parsed_url['query'] : '';
  $fragment = (!empty($parsed_url['fragment'])) ? '#' . $parsed_url['fragment'] : '';

if ($domain_only) {
  return $host . $port;
}
else {
  return $host . $port . $path . $query . $fragment;
}
}

return FALSE;
}

Could this be the problem?

Please let me know I can clarify in any way.

What I need is for the entire url to get processed and not just the truncated one

Thanks !

展开全部

  • 写回答

1条回答 默认 最新

  • doudai8783 2012-05-31 14:24
    关注

    I have seen a very similar question here at SO or drupal SO page but couldn't find it so I'm writing "my way" answer again here.

    <?php
    
    
    function _pagepeeker_format_url($url, $domain_only = FALSE) {
    if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
    return FALSE;
    }
    
    //$url = 'http://www.google.com/url?sa=X&q=http://www.beautyjunkiesunite.com/WP/2012/05/30/whats-new-anastasia-beverly-hills-lash-genius/&ct=ga&cad=CAcQARgAIAEoATAAOABA3t-Y_gRIAlgBYgVlbi1VUw&cd=F7w9TwL-6ao&usg=AFQjCNG2rbJCENvRR2_k6pL9RntjP66Rvg';
    // Now we use parse_url to split the url to an array with url parts.
    $parsed_url = parse_url($url);
    // $parsed_url['query'] is 'sa=X&q=http://www.beautyjunkiesunite.com/WP/2012/05/30/whats-new-anastasia-beverly-hills-lash-genius/&ct=ga&cad=CAcQARgAIAEoATAAOABA3t-Y_gRIAlgBYgVlbi1VUw&cd=F7w9TwL-6ao&usg=AFQjCNG2rbJCENvRR2_k6pL9RntjP66Rvg'
    // ";" can also be used to separate params. But & is the usual one so using it.
    $queryParts = explode('&', $parsed_url['query']);
    
        $params = array();
        foreach ($queryParts as $param) {
            $item = explode('=', $param);
            // sa = X, etc.
            $params[$item[0]] = $item[1];
        }
    //$params is now an array with query parts.
    // $params['sa'] = 'X' , q = 'http://www.beautyjunkiesunite.com/WP/2012/05/30/whats-new-anastasia-beverly-hills-lash-genius', etc.
    
    if ($domain_only){
    $new_url_parsts = parse_url($params['q']);
    return $new_url_parts['host'];
    }
    else{
    return $params['q'];
    }
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部