Jump to content

Echo Anchor Tag Ampersand Issues with PHP


jockey_jockey

Recommended Posts

Hello,

 

I have an XSL file and I am firing an Ajax call from a link that would do a GET request to the PHP script and it would return a string that basically holds a snippet of HTML and as I get back the response, the Ajax callback would manipulate an exisiting section of the HTML with the response just received.

 

Its working fine except that I am printing anchor tags which is a GET request to some script. The problem is that the "Ampersand" is not correctly passed on to the XHTML page.

 

Snippets are below:

 

Script that creates the string and echoes on the server side:Snippet:

 

$print .= "<td>";

$print .= "<a href='" . "main.php?page=config_detail" . "&" . "app=" . $_GET['app'] . "&" . "config=" . $config_id_ex[$x]. "'>" .$config_name_ex[$x]. "</a>";

$print .= "</td>";

 

Link that is actually present on the XHTML file after the AJAX is executed is:

 

http://localhost/main.php?page=config_detail&#38;app=26&%2338;config=1000

 

But I want it to be "&".

 

Please help,

 

Thanks in advance

 

$array = array('page'=>'config_detail', 'app'=>$_GET['app'], 'config'=>$config_id_ex[$x]);
$querystring = http_build_query($array);
$print .= "<td>";
$print .= "<a href='main.php?$querystring'>" .$config_name_ex[$x]. "</a>";
$print .= "</td>"; 

Thanks for the reply,

 

I am afraid that did not work. That is because when you issue an http_build_query, the hrefs now have & instead of & and when I try to inject the received html fragment into the current html using DOM, it will fail since it finds an unescaped & and fails.

 

I think the actual code might help to be more clear:

 

The URLs that are being generated is a part of a custom framework that we use. So the main.php?page=config_detail means that I go to main.php which redirects me to a page called config_detail.php.

 

Code that has the anchor to the page generating the XHTML fragment:

 

<a id="all_data" name="main.php?process=spec_run&app={$sItem}&all" style="color:#FFFFFF;"> view all </a>

 

So this goes to a page called spec_run at a specific location which is not important for the problem that I have.

 

The request is handled by an AJAX Call (Jquery) as follows:

 

$(document).ready(function() {

 

$("a#all_data").click(function() {

 

var furl = $(this).attr("name");

var turl = furl.split("?");

var page = turl[0];

var params = turl[1];

 

$.ajax({                                //Building request

    url: page,

    type: 'GET',

    data: params,

    dataType: 'html',                //Datatype of the response

    timeout: 10000000,

    error: function(xhr,err,e) {

          alert('error getting raw data' + err);

    },

    success: function(text){

$("table#detail_table").html(text);    //On Success, replacing the table tag that has the id: "detail_table" with the contents that it received

}

});

 

return false;

 

});

});

 

The code that generates the XHTML on the spec_run page:

 

$print = "";

$print .= "<table id='detail_table'>";

$print .=  "<thead>";

$print .=  "<tr>";

$print .=  "<a class='sort_link' href='#'>Build</a>";

$print .=  "</th>";

$print .=  "<th>";

$print .=  "<a class='sort_link' href='#'>Config</a>";

$print .=  "</th>";

$print .=  "<th>";

 

for ($x=0; $x<$r; $x++) {

if($x % 2 == 0)

    $print .= '<tr class="odd">';

else

    $print .= '<tr class="even">';

 

//Build:

$print .= "<td>";

$print .= "<a href='main.php?page=build_detail&app=" .$_GET['app']. "&build=" .$build_id_ex[$x]. "'>" .$build_name_ex[$x]. "</a>";

$print .= "</td>";

 

//Config:

 

$print .= "<td>";

$print .= "<a href='" . "main.php?page=config_detail" . "&" . "app=" . $_GET['app'] . "&" . "config=" . $config_id_ex[$x]. "'>" .$config_name_ex[$x]. "</a>";

$print .= "</td>";

 

 

$print .= "</tr>";

$print .= "</tbody>";

$print .= "</table>";

 

echo $print;

 

 

The tables is being rendered correctly and everything else looks fine except the anchor tags that have messed up ampersands. It actually gets rendered as:

 

main.php?page=config_detail&#38;app=26&%2338;config=1000

 

Please advice,

 

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.