40

I am trying to pass percent (%) sign in url like

%B6011000995504101^SB

but when I echo, it returns

♦011000995504101^SB

I want exact same value as I pass it in URL.

I have tried to use urlencode() function, but it give me output like this...

%B6011000995504101%5ESB

please help me regarding this

Sumit Bijvani
  • 8,154
  • 17
  • 50
  • 82
  • 2
    use url_encode() and url_decode() may also require htmlentities() %B6 for example is the code for the blob you got. passing the % is actually a really bad idea you'd be better off passing a different character for percent or not passing it at all and assume that the % is always there and assign it i nyour script after. – Dave Jun 27 '13 at 12:06
  • % is used for urlencode, better to pass a specific pattern like $$ or something else and decode it in the php code. – Sudip Pal Jun 27 '13 at 12:07
  • possible duplicate of [urlencode but ignore certain chars](http://stackoverflow.com/questions/1676209/urlencode-but-ignore-certain-chars) – Simon M Jun 27 '13 at 12:08

2 Answers2

79

Answer:

To send a % sign in a url, instead send %25.

In your case, in order for php to see a percent sign, you must pass the character string %25B6011000995504101^SB to the server.

Why:

In URLs, the percent sign has special meaning. Is used to encode special characters. For example, & is the separator between parameters, so if you want your parameter to actually contain an &, you instead write %26. Because the percent sign is used to encode special characters, it is also a special character, and so if you want to actually send a percent sign, it must also be encoded. The encoding for a percent sign is %25.

IanPudney
  • 5,941
  • 1
  • 24
  • 39
6

Before including a raw string in a URL it's a good idea to pass it through urlencode like so:

<?php
$original='%B6011000995504101^SB';

$updated=urlencode($original);

echo "<a href=\"some_page.php?$updated\">Link here</a>";
?>

The receiving page will know what to do - give this example a try on your webserver:

<?php

if($_GET['argument']) {
    echo "<p>You passed in the argument &quot;$_GET[argument]&quot;</p>";
}else {
    echo "<p>No argument was passed.</p>";
}
$original='%B6011000995504101^SB';

$updated=urlencode($original);

echo "<a href=\"urlencode.php?argument=$updated\">Link here</a>";
?>

(name the file urlencode.php)