Determinarea unei expresii regulate pentru url pentru câmpul drupal

Încerc să încerc să determin o expresie regulată pentru a analiza urlul interior din această redirecționare de alertă google

http://www.google.com/url?sa=X&q=http://weheartit.com/entry/29409069&ct=ga&cad=CAcQARgAIAEoATAAOABAo5aK_gRIAlgBYgVlbi1VUw&cd=jRWL16jvo8k&usg=AFQjCNGbJMqWtbCxpcJdu4PGD6RToU6NTw

Ceea ce trebuie să fac este să eliminăm prima parte care este

http://www.google.com/url?sa=X&q=

Și aș elimina, de asemenea, șirul care este

&ct=ga&cad=CAcQARgAIAEoATAAOABAo5aK_gRIAlgBYgVlbi1VUw&cd=jRWL16jvo8k&usg=AFQjCNGbJMqWtbCxpcJdu4PGD6RToU6NTw

Deci, urlul final cu care voi termina este:

http://weheartit.com/entry/29409069

Am vrut doar să actualizez această mulțumire pentru ajutor. Aceasta a fost o problemă în modulul de legătură pentru Drupal și a fost rezolvată

1
Ei bine, ar putea fi foarte simplu pentru tine, dar eu am multe probleme pentru a lucra cel mai bine am putut veni cu <? PHP funcția sub_node_save() {$ url = $ node-> field_web_screenhot ['und'] [0] [ 'url']; $ url = preg_replace ('. *? (http) (.) (.) (?: \\/[\\ w \\. \\ -] +) +)', '', $ url); $ node-> field_web_screenhot ['und'] [0] ['url'] = $ url; întoarcere ; }?>
adăugat autor naeluh, sursa
nu un duplicat exact pentru că există 2 urluri cu redirecționarea, așa că doar detectarea adresei URL nu mă va ajuta Trebuie să eliminați un url și un șir de caractere. Mulțumesc pentru celelalte linkuri pe care le apreciez, dar încă am probleme
adăugat autor naeluh, sursa
Avem niște duplicate în acest sens. Regex-ul este foarte simplu. Și alternativa cu parse_url și parse_str chiar mai mult.
adăugat autor mario, sursa
duplicat posibil din Extrageți adresa URL din șir
adăugat autor mario, sursa
adăugat autor mario, sursa
Utilizați linkul de editare , nu și comentariile, pentru adăugarea la întrebarea dvs.
adăugat autor mario, sursa

2 răspunsuri

Încă nu este clar ce încercați să realizați, fie că este vorba de extragerea sau îndepărtarea părților înconjurătoare, nu este cu adevărat dificil:

preg_match('#q=(http://[^&]+)#', $source, $result);
print $result[1];

Sau altfel:

= preg_replace('#^.+q=([^&]+).+$#', '$1', $source);

Ar merge.

And again, the alternative lies in parse_url and parse_str

1
adăugat
Am instalat Drupal 7 că am un câmp de modul Link care este populat de rss feed de la Google alerte urlul care este salvat în câmp este urlul de redirecționare google, deoarece asta este ceea ce Google revine din feed Am un alt modul care formatează adresa URL într-o adresă URL pentru un server de screenshot care nu acceptă redirecționări în mod corespunzător, așa că trebuie să primesc urlul principal și nu url cu redirecționarea pentru ca serverul de screenshot să funcționeze corect Îmi pare rău că ar fi trebuit să spun în primul rând mulțumesc pentru ajutor Mario face mai mult simți deloc
adăugat autor naeluh, sursa
Ceea ce fac este să fac un modul care să funcționeze cu câmpul pe care trebuie să-l schimb și să salvez noul url
adăugat autor naeluh, sursa

Dacă într-adevăr doriți să eliminați manual URL-ul în bucăți, puteți ...

$ cat parseurl.php 
#!/usr/local/bin/php
<?php

$url="http://www.google.com/url?sa=X&q=http://weheartit.com/entry/29409069&ct=ga&cad=CAcQARgAIAEoATAAOABAo5aK_gRIAlgBYgVlbi1VUw&cd=jRWL16jvo8k&usg=AFQjCNGbJMqWtbCxpcJdu4PGD6RToU6NTw";

# Parts of this section could be replaced with parse_url()
$junk = explode("?", $url);
$parts = explode("&", $junk[1]);
$gvar = array();
foreach ($parts as $thisone) {
  $junk = explode("=", $thisone);
  $gvar[$junk[0]]=$junk[1];
}

print_r($gvar);

printf("Embedded URL: %s\n", $gvar["q"]);

$ ./parseurl.php 
Array
(
    [sa] => X
    [q] => http://weheartit.com/entry/29409069
    [ct] => ga
    [cad] => CAcQARgAIAEoATAAOABAo5aK_gRIAlgBYgVlbi1VUw
    [cd] => jRWL16jvo8k
    [usg] => AFQjCNGbJMqWtbCxpcJdu4PGD6RToU6NTw
)
Embedded URL: http://weheartit.com/entry/29409069
$ 

Pentru a face acest lucru cu parse_url() și parse_str, puteți folosi ceva de genul:

<?php

$url="http://www.google.com/url?sa=X&q=http://weheartit.com/entry/29409069&ct=ga&cad=CAcQARgAIAEoATAAOABAo5aK_gRIAlgBYgVlbi1VUw&cd=jRWL16jvo8k&usg=AFQjCNGbJMqWtbCxpcJdu4PGD6RToU6NTw";

parse_str( parse_url($url, PHP_URL_QUERY), $gvar );
printf("Embedded URL: %s\n", $gvar['q']);

Acest lucru pare cu siguranta ca o modalitate mai usoara de a merge, dar voi lasa prima versiune pentru a vedea ce se intampla "sub capota". :-)

1
adăugat
Wow multumesc foarte mult pentru ajutorul tau, eu formulaz cum sa folosesc asta cu Drupal chiar acum.
adăugat autor naeluh, sursa
Ceea ce am crezut că ar putea să funcționeze nu este - <? PHP funcția sub_node_save() {$ url = $ node-> field_web_screenhot ['und'] [0] ['url']; $ url = parse_str (parse_url ($ url, PHP_URL_QUERY), $ gvar); $ node-> field_web_screenhot ['und'] [0] ['url'] = $ url; întoarcere; }
adăugat autor naeluh, sursa
Nu uitați că parse_str() are un al doilea argument, o matrice în care vor fi inserate variabilele parsate. Aceasta vă elimină partea inferioară.
adăugat autor ghoti, sursa
DOH! Chiar ești, ghoti. N-am mai văzut asta înainte. Mulțumesc, îmi voi actualiza răspunsul.
adăugat autor Graham, sursa
PHP România, Moldova
PHP România, Moldova
173 participanți

Vorbim despre Yii, Laravel, Symphony, MySQL, PgSQL, WP, OpenCart... Pentru confort, opriți notificările. Parteneri: https://ciupacabra.com @js_ro @node_ro @python_ro @seo_ro @Romania_Bot Offtop: @holywars_ro Joburi: @php_job @Grupuri_IT