Ciao.
Puoi risolvere in diversi modi. In qualunque caso dovrai ricostruire correttamente quella stringa prima di passarla alla funzione include di php.
A mio parere puoi ricostruirla già nella funzione loadPage di js in modo che, alla proprietà "data" di ajax, sia passato un riferimento "reale" della pagina.
C'è però da considerare qualche possibile problema. Sia ajax che php utilizzano il cosiddetto formato MIME per passare i dati da una pagina all'altra (cioè: var1=val1&var2=val2&varN=valN). Questo può generare dei conflitti nella costruzione delle querystring utilizzate per effettuare il passaggio di dati tra ajax e php, soprattutto nel caso in cui tu voglia passare più di un valore in GET alla tua pagina finale.
Ti faccio giusto un esempio. Immagina di voler passare un url del genere:
codice:
profile.php?user=prova&pw=123
..quindi nella chiamata ajax avrai praticamente:
codice:
data: 'page=profile.php?user=prova&pw=123'
..e di conseguenza al php arriveranno erroneamente due variabili (a causa del carattere &):
codice:
page=profile.php?user=prova
pw=123
Questo problema lo puoi risolvere usando le apposite funzioni per codificare (escape, in js) e decodificare (urldecode, in PHP) la querystring passata.
Quindi su js potresti avere una cosa del genere:
codice:
function loadPage(url)
{
url=url.replace('#','').split('?');
url=escape(url[0]+'.php'+(url.length>1?'?'+url[1]:''));
$.ajax({
type: "POST",
url: "load_page.php",
data: 'page='+url,
dataType: "html",
success: function(msg){
if(parseInt(msg)!=0) //if no errors
{
$('#pageContent').html(msg);
}
}
});
}
Brevemente: ho splitato l'url per estrapolare l'eventuale parte che si riferisce alle variabili da passare in GET. Quindi ho riassemblato la stringa inserendo adeguatamente anche l'estensione ".php" e facendo un escape del tutto.
Mentre in PHP:
codice:
<?php
if(!$_POST['page']) die("0");
$page = urldecode($_POST['page']);
include('pages/'.$page);
?>
Ricevo la stringa e la decodifico. Quindi la passo alla funzione include (senza aggiungere l'estensione ".php" che avevo già inserito in js)
Nota: urldecode (in php) è usata come funzione inversa di escape (in js) anche se il tipo di codifica non è esattamente corrispondente tra le due funzioni. In questo caso dovrebbe comunque funzionare.
Non ho avuto modo di testare il tutto, ad ogni modo spero sia chiaro il ragionamento.