dtvhqlc57127
dtvhqlc57127
2012-05-31 16:37

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 doudai8783 9年前

    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'];
    }
    
    点赞 3 评论 复制链接分享