Importare e troncare una stringa da url

  • Creatore Discussione Creatore Discussione leonte54
  • Data di inizio Data di inizio
L

leonte54

Guest
Salve, importo da url una stringa con questo codice:
PHP:
$url = fopen("http://sitename.org/reader.php?date=".date('Ymd')."&type=saint&lang=".$lang,"r");
while (!feof($url))	$santo .= fgets($url);

e fin qui non ho problemi.

Vorrei troncare la stringa importata, ma se inserisco il codice:
PHP:
substr($url,0,strpos($url,'), ')+1);

non vedo più la stringa.

Mentre se al posto dell'url inserisco una stringa non importata il secondo codice funziona.
Grazie per l'aiuto e le eventuali spiegazioni
 
infatti, il codice completo è:
PHP:
$url = fopen("http://sitename.org/reader.php?date=".date('Ymd')."&type=saint&lang=".$lang,"r");
while (!feof($url))	$santo .= fgets($url);
$santo1 = substr($santo,0,strpos($santo,'), ')+1);
ma non funziona, praticamente il codice di troncatura non mi visualizza la stringa, mentre se al posto dell'url importato utilizzo una stringa normale la troncatura funziona.

Grazie
 
ciao
allora verifica tutti i passaggi dividendo anche le istruzioni
PHP:
<?php
$url = fopen("http://sitename.org/reader.php?date=".date('Ymd')."&type=saint&lang=".$lang,"r");
echo "<pre>";
var_dump($url);//verifichi che ti apra
while (!feof($url))    $santo .= fgets($url);
var_dump($santo);//verifichi che legga la stringa
//qui dividi le istruzioni
$s=strpos($santo,'), ');
var_dump($s);//e verifichi che trovi la substringa
$santo1 = substr($santo,0,$s+1);
var_dump($santo1);
echo "</pre>";
?>
facendo così dovresti capire da quanto ti restituiscono i vari var_dump dove si inghippa, eventualmente posta i risultati
poi i pre e i var_dump li togli
 
Grazie per l'aiuto.

Ho provato con i var_dump e ho ottenuto i seguenti risultati:
PHP:
$url = fopen("http://sitename.org/reader.php?date=".date('Ymd')."&type=saint&lang=".$lang,"r"); 
echo "<pre>"; 
var_dump($url);//verifichi che ti apra 
/* risultato = resource(228) of type (stream) */

while (!feof($url))    $santo .= fgets($url); 
var_dump($santo);//verifichi che legga la stringa
/* risultato = resource(228) of type (stream)
string(495) "
B. Augusto Czartoryski, sacerdote S.D.B. (1858-1893),  S. Dionigi, vescovo di Alessandria di Egitto (� 264)" */

//qui dividi le istruzioni 
$s=strpos($santo,'), '); 
var_dump($s);//e verifichi che trovi la substringa 
/* risultato = resource(228) of type (stream)
string(495) "
B. Augusto Czartoryski, sacerdote S.D.B. (1858-1893),  S. Dionigi, vescovo di Alessandria di Egitto (� 264)"
bool(false) */

$santo1 = substr($santo,0,$s+1); 
var_dump($santo1);
/* risultato = resource(228) of type (stream)
string(495) "
B. Augusto Czartoryski, sacerdote S.D.B. (1858-1893),  S. Dionigi, vescovo di Alessandria di Egitto (� 264)"
bool(false)
string(1) "
" */

echo "</pre>";

sembrerebbe che non accetti il strpos con l'url, perchè se la stessa stringa la posiziono al posto del fopen mi legge la sequenza dei caratteri da dove voglio troncare.
 
ciao
non mi torna questo risultato
PHP:
<?php
//.....
$s=strpos($santo,'), '); 
var_dump($s);//e verifichi che trovi la substringa 
/* risultato = resource(228) of type (stream)
string(495) "
B. Augusto Czartoryski, sacerdote S.D.B. (1858-1893),  S. Dionigi, vescovo di Alessandria di Egitto (� 264)"
bool(false) */ 
//...
?>
$s dovrebbe essere un numero intero, sei sicuro che quello sia l'out del var_dump?
 
Ho scoperto che nel strpos al posto di < '), ' > inserisco 1893 tutto funziona.
Il problema inizia quando metto )
 
Ciao,
ho provato anche con il backslash, ho letto le istruzioni su manuale php: http://www.php.net/manual/it/regexp.reference.escape.php
ma non riesco a venirne a capo.

Per esempio la stringa di oggi è:
S. Miguel de los Santos, sacerdote O.SS.T. (1591-1625), S. Maddalena di Canossa, vergine e fondatrice (1774-1835)

se utilizzo questo codice:
PHP:
substr($santo,0,strpos($santo,'1625)')+6);

ottengo:
S. Miguel de los Santos, sacerdote O.SS.T. (1591-1625)<

Non capisco perché al posto della virgola mi mette il simbolo del minore <. Inoltre ottengo un float indesiderato nel template.

Mentre con questo codice:
PHP:
substr($santo,0,strpos($santo,'5)')+6);

ottengo:
S. Miguel de los Santos, sacerdote O.SS.T. (1591-1625) senza float indesiderato ma non tornano i conti, 5)+6 dovrebbe darmi 5), S
 
ciao
ho provato, e funziona, non capisco dove stai sbagliando
PHP:
<?php
echo "<pre>";
$santo="S. Miguel de los Santos, sacerdote O.SS.T. (1591-1625), S. Maddalena di Canossa, vergine e fondatrice (1774-1835)";
var_dump($santo);
$s=strpos($santo,"), ");
var_dump($s);
$santo1 = substr($santo,0,$s+1);
var_dump($santo1);
echo "<pre>";
?>
e questo è l'output
string(113) "S. Miguel de los Santos, sacerdote O.SS.T. (1591-1625), S. Maddalena di Canossa, vergine e fondatrice (1774-1835)"
int(53)
string(54) "S. Miguel de los Santos, sacerdote O.SS.T. (1591-1625)"

altimenti puoi provare a cambiare metodo, es
PHP:
<?php
echo "<pre>";
$santo="S. Miguel de los Santos, sacerdote O.SS.T. (1591-1625), S. Maddalena di Canossa, vergine e fondatrice (1774-1835)";
var_dump($santo);
$santo1=explode("), ",$santo);
var_dump($santo1);
$santo1[0]=$santo1[0].")";
var_dump($santo1[0]);
echo "<pre>";
?>
con l'output
string(113) "S. Miguel de los Santos, sacerdote O.SS.T. (1591-1625), S. Maddalena di Canossa, vergine e fondatrice (1774-1835)"
array(2) {
[0]=>
string(53) "S. Miguel de los Santos, sacerdote O.SS.T. (1591-1625"
[1]=>
string(57) "S. Maddalena di Canossa, vergine e fondatrice (1774-1835)"
}
string(54) "S. Miguel de los Santos, sacerdote O.SS.T. (1591-1625)"
il risultato finale è lo stesso
 
Ciao voglio comunque ringraziarti per il tempo che mi stai dedicando.

Lo so che da stringa funziona, infatti se ripercorri i post l'avevo già evidenziato.

Il problema si verifica da url:

PHP:
$santo= fopen("http://feed.evangelizo.org/reader.php?date=".date('Ymd')."&type=saint&lang=".$lang,"r");

e l'unico punto in comune dei santi del giorno è proprio la sequenza '), '
 
ciao
sei sicuro della stringa
S. Miguel de los Santos, sacerdote O.SS.T. (1591-1625), S. Maddalena di Canossa, vergine e fondatrice (1774-1835)
non è che per caso ci sia qualche tag html?
fai il var_dump o usa echo sulla stringa completa poi vai a vedere con visualizza sorgente del browser se ci sono caratteri strani o tag html
 
Grazie,
il problema era proprio l'HTML, quindi con questo codice funziona perfettamente.

$s=strpos($santo,')</a>,&nbsp;');
$santo1 = substr($santo,0,$s+5);
 
ciao
secondo me è meglio toglierli i tag, prova così
PHP:
<?php
//.....
$santo=strip_tags($santo);//elimini tutti i tag
s=strpos($santo,'),&nbsp;');
$santo1 = substr($santo,0,$s+5); 
//....
?>
 
Ho provato senza tag ma non funziona, con i tag funziona anche il link, questo è il codice sorgente funzionante.

<span id="saints">
<font style="align-text:left" dir="ltr"><a href="#" onclick="window.open('http://evangelizo.org/popup-saints.php?language=IT&id=2017&fd=0', '', 'width=500,height=450,top=120,left=120,scrollbars=yes')">S. Giovanni di Montemarano, vescovo († 1095)</a></span>
 
Ciao, scusate se mi intrometto ma non riesco a capire esattamente quale risultato devi ottenere,
comunque ti consiglio di usare la funzione di php file_get_contents()
PHP:
<?php

$lang = 'IT';
$html = file_get_contents("http://feed.evangelizo.org/reader.php?date=" . date('Ymd') . "&type=saint&lang=" . $lang);
$result = explode(",&nbsp;&nbsp;", $html);
foreach ($result as $value) {
    echo $value . "<br/>";
}
?>
 
Ultima modifica:

Discussioni simili