3

我有可能涉及一些 php 帮助的 drupal 7 问题。我从谷歌警报创建了一个 rss 提要,我将其映射到字段中。我已经成功映射到除了链接模块字段之外的所有字段,我在其中放置了一个字段格式化程序,该字段格式化程序通过将适当的 url 服务器查询附加到提要 url 来创建一个 pagepeeker 屏幕截图。Feeds 通过获取项目 URL(链接)并将其正确放入字段来完成其工作。我在使用 pagepeeker 或链接模块时遇到问题,因为以下情况一直在发生。

回顾一下

Google 警报提要 -> 链接模块字段 -> pagepeeker 屏幕截图格式化程序

这是错误

谷歌警报提供的网址是

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

当显示链接时,我得到:

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

它在 url 处切割 url 而没有得到其余的 url。

这是 pagepeeker 用来解析 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;
}

这可能是问题吗?

请让我知道我可以以任何方式澄清。

我需要的是处理整个网址,而不仅仅是截断的网址

谢谢 !

4

1 回答 1

1

我在 SO 或 drupal SO 页面上看到了一个非常相似的问题,但找不到它,所以我在这里再次写下“我的方式”答案。

<?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'];
}
于 2012-05-31T22:24:49.380 回答