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" . "&amp;" . "app=" . $_GET['app'] . "&amp;" . "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&app=26&%2338;config=1000

But I want it to be "&".

Please help,

    I suggest changing that to:

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

      Thanks for the reply. I actually am doing that. I do not need to urlencode the GET parameters since they are just numbers and I am actually creating the link when it comes in as GET (but I tried doing that). And I am already htmlspecialchars-ing config name (not shown in the code).

      The problem is that the above entities are handled correctly. The ampersands are not. The link that finally gets printed is as follows:

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

      Any ideas?

        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&amp;app={$sItem}&amp;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&amp;app=" .$_GET['app']. "&amp;build=" .$build_id_ex[$x]. "'>" .$build_name_ex[$x]. "</a>";
        $print .= "</td>";

        //Config:

        $print .= "<td>";
        $print .= "<a href='" . "main.php?page=config_detail" . "&amp;" . "app=" . $_GET['app'] . "&amp;" . "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,

          hmm... honestly, I am not sure what is the problem. Could you post the smallest and simplest runnable code that demonstrates the problem? Something that other people can run out of the box and see immediately the problematic output you are talking about.

          Chances are, while coming up with that mini-script you would find the problem and know how to fix it.

            laserlight wrote:

            hmm... honestly, I am not sure what is the problem. Could you post the smallest and simplest runnable code that demonstrates the problem? Something that other people can run out of the box and see immediately the problematic output you are talking about.

            Chances are, while coming up with that mini-script you would find the problem and know how to fix it.

            Thanks for the reply,

            The only thing that I am doing here is that I am having an Ajax call when you click on an anchor. The call requests the PHP page using GET. The PHP page builds the response that has anchor hrefs in it that has ampersands in it that need to be sent over as "&amp;" but the final html doesn't.

            What I expect:

            main.php?page=config_detail&amp;app=26&amp;config=1000

            What I get:

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

            Any Ideas?

              they way i see it its only doing what you told it... in your code you call the html equiv of ampersand in your urls instead of just using an ampersand...

                Write a Reply...