downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

chop> <addslashes
[edit] Last updated: Fri, 25 May 2012

view this page in

bin2hex

(PHP 4, PHP 5)

bin2hex2進表現のデータを16進表現に変換する

説明

string bin2hex ( string $str )

str を16進表現に変換したASCII文字列を返します。 変換は、上位ニブルからバイト毎に行われます。

パラメータ

str

文字列。

返り値

指定した文字列を16進表現に変換したものを返します。

参考

  • hex2bin() - 16進エンコードされたバイナリ文字列をデコードする
  • pack() - データをバイナリ文字列にパックする



chop> <addslashes
[edit] Last updated: Fri, 25 May 2012
 
add a note add a note User Contributed Notes bin2hex
subdivizion at gmail dot com 18-Sep-2009 05:19
Here's a function to check if a string contains any 7-bit GSM characters.

It might come useful for people working on SMS platforms.

<?php
 
function check_gsm($str)
{
   
$arr = array(
"0x00", "0x01", "0x02", "0x03", "0x04", "0x05","0x06","0x07","0x08","0x09",
"0x0A","0x0B","0x0C","0x0D","0x0E","0x0F","0x10","0x11","0x12","0x13",
"0x14","0x15","0x16","0x17","0x18","0x19","0x1A","0x1B","0x1B0A",
"0x1B14","0x1B28","0x1B29","0x1B2F","0x1B3C","0x1B3D","0x1B3E",
"0x1B40","0x1B65","0x1C","0x1D","0x1E","0x1F","0x20","0x21","0x22",
"0x23","0x24","0x25","0x26","0x27","0x28","0x29","0x2A","0x2B","0x2C",
"0x2D","0x2E","0x2F","0x30","0x31","0x32","0x33","0x34","0x35","0x36",
"0x37","0x38","0x39","0x3A","0x3B","0x3C","0x3D","0x3E","0x3F","0x40",
"0x41","0x42","0x43","0x44","0x45","0x46","0x47","0x48","0x49","0x4A",
"0x4B","0x4C","0x4D","0x4E","0x4F","0x50","0x51","0x52","0x53","0x54",
"0x55","0x56","0x57","0x58","0x59","0x5A","0x5B","0x5C","0x5D","0x5E",
"0x5F","0x60","0x61","0x62","0x63","0x64","0x65","0x66","0x67","0x68",
"0x69","0x6A","0x6B","0x6C","0x6D","0x6E","0x6F","0x70","0x71","0x72",
"0x73","0x74","0x75","0x76","0x77","0x78","0x79","0x7A","0x7B","0x7C",
"0x7D","0x7E","0x7F");
 
   
$strl = strlen($str);
    for (
$i = 0;$i < $strl; $i++)
    {
       
$char = '0x' . bin2hex(substr($str,$i,1));
       
$pos = in_array($char,$arr);
        if (
$pos == 1)
        {
           
$j++;
        }
    }
 
    if (
$j < $strl)
    {
        return
false;
    }
    else
    {
        return
true;
    }
}
?>
me at juanmaria dot com 03-Sep-2009 06:05
Regarding the fabled hex2bin, the easiest way I've found to "replace" it is the following call to function pack():

<?php
$bin_str
= pack("H*" , $hex_str);   
?>
gimpstraw at gmail dot com 20-Apr-2009 11:01
I want clear this up for everyone using functions like the one below this...

<?php
function bin2hex($str) {
   
$hex = "";
   
$i = 0;
    do {
       
$hex .= dechex(ord($str{$i}));
       
$i++;
    } while (
$i < strlen($str));
    return
$hex;
}

// Look what happens when ord($str{$i}) is 0...15
// you get a single digit hexadecimal value 0...F

// bin2hex($str) could return something like 4a3,
// decimals(74, 3), whatever the binary value is of those.

function hex2bin($str) {
   
$bin = "";
   
$i = 0;
    do {
       
$bin .= chr(hexdec($str{$i}.$str{($i + 1)}));
       
$i += 2;
    } while (
$i < strlen($str));
    return
$bin;
}

// hex2bin("4a3") just broke. Now what?

// Using sprintf() to get it right.
function bin2hex($str) {
   
$hex = "";
   
$i = 0;
    do {
       
$hex .= sprintf("%02x", ord($str{$i}));
       
$i++;
    } while (
$i < strlen($str));
    return
$hex;
}

// now using whatever the binary value of decimals(74, 3)
// and this bin2hex() you get a hexadecimal value you can
// then run the hex2bin function on. 4a03 instead of 4a3.
?>
nodarinodo 18-Dec-2008 01:35
<?php
if(!function_exists('bin2hex'))
{
function
bin2hex($str)
    {
       
$strl = strlen($str);
       
$fin = '';
        for(
$i =0; $i < $strl; $i++)
        {
           
$fin .= dechex(ord($str[$i]));
        }
        return
$fin;
    }
}
?>
chaos79 03-Oct-2008 08:30
Because the way back (hex2bin) doesn't exist on php, i've written another little function without using commands like pack:

<?php
// Convert a hex-string to binary-string (the way back from bin2hex)

function hex2bin($h)
  {
  if (!
is_string($h)) return null;
 
$r='';
  for (
$a=0; $a<strlen($h); $a+=2) { $r.=chr(hexdec($h{$a}.$h{($a+1)})); }
  return
$r;
  }

echo
bin2hex('Hello'); // result: 48656c6c6f
echo hex2bin('48656c6c6f'); // result: Hello
?>
admin at purespider dot de 15-Aug-2008 05:08
The most simple way to do binary (10101010 or so) to hex is
<?PHP echo dechex(bindec(10101010)); ?>
kissifrot at gmail dot com 26-Nov-2007 02:37
hex2bin can be useful to insert data into BLOB binary fields.

for example if you want to insert the content of a file :

<?php
$filename
= '/foo/bar';
$bin_content = fread(fopen($filename,"r"),filesize($filename));

// use the usual mysql_connect() function

$insert_query = "INSERT INTO mytable (blob_field) VALUES ('".bin2hex($bin_content)."')";
mysql_query($insert_query);

?>
tehjosh at gamingg dot net 11-Aug-2007 11:35
This function is for converting binary data into a hexadecimal string representation.  This function is not for converting strings representing binary digits into hexadecimal.  If you want that functionality, you can simply do this:

<?php
$binary
= "11111001";
$hex = dechex(bindec($binary));
echo
$hex;
?>

This would output "f9".  Just remember that there is a very big difference between binary data and a string representation of binary.
ratfactor at gmail dot com 23-Nov-2006 12:13
I also wished to have the ability to translate a string containing a binary number ('1101') to a string containing a hexadecimal number ('d').  Here is my function:

function strbin2hex($bin){
  $last = strlen($bin)-1;
  for($i=0; $i<=$last; $i++){ $x += $bin[$last-$i] * pow(2,$i); }
  return dechex($x);
}

Example:
strbin2hex('1101');   // returns 'd'

I also added some optional features to my function (zero padding and upper case hex letters):

function strbin2hex($bin, $pad=false, $upper=false){
  $last = strlen($bin)-1;
  for($i=0; $i<=$last; $i++){ $x += $bin[$last-$i] * pow(2,$i); }
  $x = dechex($x);
  if($pad){ while(strlen($x) < intval(strlen($bin))/4){ $x = "0$x"; } }
  if($upper){ $x = strtoupper($x); }
  return $x;
}

Examples:
strbin2hex('11110101', true, true);   // returns 'F5'
strbin2hex('00001011', true, true);   // returns '0B'
nilzie at gmail dot com 14-Jul-2006 06:12
Since PHP only has a way to convert a real binary string into hex, couldn't I find a function that can convert binary information written in ascii (like 0110). This function will convert that

<?
function asciibin2hex($str) {

$str = str_replace(" ", "", $str); //delete some probably spaces

//Binary to HEX list

$binary['0000'] = "0";
$binary['0001'] = "1";
$binary['0010'] = "2";
$binary['0011'] = "3";
$binary['0100'] = "4";
$binary['0101'] = "5";
$binary['0110'] = "6";
$binary['0111'] = "7";
$binary['1000'] = "8";
$binary['1001'] = "9";
$binary['1010'] = "a";
$binary['1011'] = "b";
$binary['1100'] = "c";
$binary['1101'] = "d";
$binary['1110'] = "e";
$binary['1111'] = "f";

//make sets of 4
for( ; ; ) {
$calc = strlen($str) / 4;
if(
is_numeric($calc)&&(intval($calc)==floatval($calc))) {
    break;
    }
    else {
       
$str .= 0;
        }
 }

//translate binary to hex
for($i = 0 ; $i < strlen($str) ; $i = $i + 4) {
       
$set = substr($str, $i, 4);
       
$inhex .= $binary[$set];
}

return
$inhex;

}
//Examples:
echo asciibin2hex("101101011100"); //prints: b5c
echo asciibin2hex("1011 1000 1111 1100") //prints: b8fc
echo asciibin2hex("1000 1011 1101 001") //prints: 8bd2
?>

I hope I didn't make it too hard for myself writing this all, but hé, it works :)
mike at go dot online dot pt 14-Mar-2006 04:03
Unicode/multibyte capable 'bin2hex' function, inspired by v0rbiz at yahoo dot com >> http://www.php.net/manual/en/function.ord.php#42778

function unibin2hex($u) {
    $k = mb_convert_encoding($u, 'UCS-2LE', 'UTF-8');
    $k1 = bin2hex(substr($k, 0, 1));
    $k2 = bin2hex(substr($k, 1, 1));
    return $k2.$k1;
}

Note: UCS-2LE = UCS-2 little endian; UCS-2 = UTF-16
lihong dot wei at mwbiz dot de 18-May-2005 05:15
Convert special characters(inclusiv line break) in a string into hexadecimal characters
function spec2hex($str) {
   $result = '';
   for($i = 0; $i < strlen($str); $i++) {
           if(ord(substr($str, $i, 1)) > 127 || ord(substr($str, $i, 1)) == 10){
               $result .= '&#x'.bin2hex(substr($str, $i, 1)).';';
           }
           else{
               $result .= substr($str, $i, 1);
           }
   }
   return $result;
}
php_guru t bestof dsh inter dt net 03-Feb-2005 12:15
The function hexentities($str) of the previous post is equivalent to

<?= substr( chunk_split( bin2hex( " $str" ), 2, ";&#x" ), 3,-3) ?>

Also, I think that the <address> tag should be used for the whole paragraph (usually at document foot) and not as shortcut for <span class=email> or so (although it is an %inline; element), see e.g. http://www.w3.org/TR/html4/struct/global.html#h-7.5.6
manithu at fahr-zur-hoelle dot org 09-Jan-2005 01:30
This function returns the string $str in htmlentity hex format (&#xnumber;).
It is useful to prevent spam bots indexing your email adress.

<?php

function hexentities($str) {
   
$return = '';
    for(
$i = 0; $i < strlen($str); $i++) {
       
$return .= '&#x'.bin2hex(substr($str, $i, 1)).';';
    }
    return
$return;
}

?>

example:
<?php echo 'email: <address>'.hexentities('foo@bar').'</address>'; ?>
will return:

email: <address>&#x66;&#x6f;&#x6f;&#x40;&#x62;&#x61;&#x72;</address>

the browser will show foo@bar.
j_lozinskit at yahoo dot co dot uk 24-Nov-2004 05:11
A good option for creating strings with binary data for saving (for example saving an sql statement to a file) into text files or php code is to do the following:

<?php
$field
=bin2hex($field);
$field=chunk_split($field,2,"\\x");
$field= "\\x" . substr($field,0,-2);
?>

this will convert your field (binary or not) into hex and then convert the hex into a string which may be placed in a php file:

FFFFFFFF -> \xFF\xFF\xFF\xFF
t0rus at dr dot com 22-Nov-2004 08:18
modified version of Thoth's hexbin and binhex to convert
any size numbers
(original doesn't take more than integer - 32bit)
<?
function hexbin($hex){
   
$bin='';
    for(
$i=0;$i<strlen($hex);$i++)
       
$bin.=str_pad(decbin(hexdec($hex{$i})),4,'0',STR_PAD_LEFT);
       return
$bin;
}

function
binhex($bin){
   
$hex='';
    for(
$i=strlen($bin)-4;$i>=0;$i-=4)
       
$hex.=dechex(bindec(substr($bin,$i,4)));
   return
strrev($hex);
}
?>
brams006 at umn dot edu 19-Aug-2004 03:05
Here's a modified version of an earlier post (asc2bin and bin2asc) to convert an incoming ascii string to hex and out again.  For example, this is really useful if you want to insert data into a mySQL database which contains both escaped and non-escaped characters.  For example, if you want to store code snibbets in a mySQL text field:

printf("here's some \"text\".");

If you INSERT this into mySQL, it probably won't come out in friendly executable format, and you can't escape all double-quotes, nor can you strip out all the slashes.  One solution is to just convert the string to hex, store it in hex, then convert back to ascii before using it in some way:

function asc2hex ($temp) {
   $len = strlen($temp);
   for ($i=0; $i<$len; $i++) $data.=sprintf("%02x",ord(substr($temp,$i,1)));
   return $data;
}

function hex2asc($temp) {
   $len = strlen($temp);
   for ($i=0;$i<$len;$i+=2) $data.=chr(hexdec(substr($temp,$i,2)));
   return $data;
}
aidan at php dot net 30-Apr-2004 08:48
hexdump() is a function for "dumping" packets or binary output from servers. See the below link for more information.

http://aidanlister.com/repos/v/function.hexdump.php
mhspam at mail dot sce dot cz 23-Apr-2004 07:14
My version of quoted-printable mail subject converting function (maybe not as effective, but preserving characters which don't need conversion).
Martin
<?php
// Transfer mail subject into Quoted Printable encoding
function mail_quote_subj($str, $charset){
   
$out = '';
    for(
$i = 0; $i < strlen($str); $i++){
       
$out .= (ord($str[$i]) > 127) ? "=" . bin2hex($str[$i]) : $str[$i];
    }
    return
"=?$charset?Q?".$out."?=";
};
?>
AntonioAlcorn at yahoo dot coma 19-Apr-2004 11:34
In response to Patrik:
A simpler way to print a number in binary is to use base_convert().
<? echo base_convert($bin, 10, 2); ?>
If you need it to print all 32 bits (as your function does) you can just pad it out:
<? echo str_pad(base_convert($bin, 10, 2), 32, '0', STR_PAD_LEFT); ?>
The conversion is from base 10 because when $bin is passed to base_convert(), it is converted to a string, and the default representation is in decimal.
Hope this helps.
Patrik 01-Feb-2004 09:14
I needed a little function that will print the binary as a string, here it comes.

<?php
function bin2string($bin) {
   
$res = "";
    for(
$p=31; $p >= 0; $p--) {
     
$res .= ($bin & (1 << $p)) ? "1" : "0";
    }
    return
$res;
}
?>
mkr at binarywerks dot dk 29-Oct-2003 05:34
Ok, this is a better version than my previous poor example.

Running this in shell creates a progress indicator. Very useful if used when parsing large log files for instance.

#!/usr/bin/php4 -q
<?
// Displays a progress indicator
function progress($line)
{
        global
$last_len;

       
$del_char = pack("H" . 2, "7F");
       
$line_len = strlen($line);
       
$del_chars=(isset($last_len)) ? $last_len : $line_len;

       
$last_len = $line_len;
        return
str_repeat($del_char, ($del_chars)).$line;
}

// demo code:
for($i=0;$i<100;$i++)
{
       
sleep(1);
        echo
progress("i is now: $i out of 100");
}
?>
Thoth 24-Oct-2003 05:24
I thought it'll give me an "F" if i give it a "1111"...

Here's something to convert a binary-string into a hex-string and other direction too:

<?php
function hexbin($hex) {
   
$bin = decbin(hexdec($hex));
    return
$bin;
}

function
binhex($bin) {
   
$hex = dechex(bindec($bin));
    return
$hex;
}
?>

simple, isn't it?
Francisco (ffaria at mutua dot com dot br) 21-Jul-2003 04:33
function to search a character in a normal string change this for a hexadecimal and take the especifical char code in hexa and replace this char and return the string

<?php
function hex_replace($pCaracter,$sCaracter,$conteudo) {
   
   
$pHex = bin2hex($pCaracter);
   
$sHex = bin2hex($sCaracter);
       
   
$tam = strlen($conteudo);   
       
    for(
$i = 0; $i <= $tam; $i++) {
       
$cont = bin2hex(substr($conteudo,$i,1));
  
        if (
$cont == $pHex) {
          
$cont = $sHex;
          
$hex .= $cont;
        }
    }
       
    for (
$i=0;$i<strlen($hex);$i+=2)
         
$bin .= chr(hexdec(substr($hex,$i,2)));
    return
$bin;
}
?>

by from a litle brazilian. :-P
andreas.schmeiler 05-Feb-2003 06:01
<?php
function hex2bin($hexdata) {
  
   for (
$i=0;$i<strlen($hexdata);$i+=2) {
     
$bindata.=chr(hexdec(substr($hexdata,$i,2)));
   }
  
   return
$bindata;
}
?>
admin at tsunaquack dot com 16-Jan-2003 01:04
Some gave a function to convert a hex code back into a simple text (human readable ASCII :P)

Some else gave a function that makes use of bin2hex to convert URLs into something like %12%34%56

Here is a function to go from the form %12%34%56 back into ASCII

Note that this function can easily be changed in order to transform any hex code into ASCII

<?
function _hex2text($str) {
   
$str = explode('%', $str);
   
array_shift($str);
   
$nmlstr = '';
    foreach(
$str as $hexstr) {
     
$nmlstr .= chr(base_convert($hexstr, 16, 10));
    }   
    return
$nmlstr;
}
?>

'hope this helps :)
Regards
-Tsuna
matthew dot eastman at hotpop dot com 08-Oct-2002 10:00
This function undoes it (converts back into ASCII).

<?php
function hex2asc($myin) {
for (
$i=0; $i<strlen($myin)/2; $i++) {
$myout.=chr(base_convert(substr($myin,$i*2,2),16,10));
}
return
$myout;
}
?>
matt at zevi dot net 21-Aug-2002 02:27
Hopefully this helps someone...

It just displays an html representation of hex data, much like a hex viewer would.

Matt

<?php
function hexview($data){
 
$bytePosition = $columnCount = $lineCount = 0;
 
$columns = 8;
 
$dataLength = strlen($data);
 
$return = array();
 
$return[] = '<table border="1" cellspacing="0" cellpadding="2">';
  for(
$n = 0; $n < $dataLength; $n++){
   
$lines[$lineCount][$columnCount++] = substr($data, $n, 1);
    if(
$columnCount == $columns){
     
$lineCount++;
     
$columnCount = 0;
    }
  }
  foreach(
$lines as $line){
   
$return[] = '<tr><td align="right">'.$bytePosition.': </td>';
    for(
$n = 0; $n < $columns; $n++){
     
$return[] = '<td>'.strtoupper(bin2hex($line[$n])).'</td>';
    }
   
$return[] = '<td> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td>';
    for(
$n = 0; $n < $columns; $n++){
     
$return[] = '<td>'.(htmlentities($line[$n]) ? htmlentities($line[$n]) : '&nbsp;').'</td>';
    }
   
$return[] = '</tr>';
   
$bytePosition = $bytePosition + $columns;
  }
 
$return[] = '</table>';
  return
implode('', $return);
}
?>
php at (what spam?) at vaejas dot com 04-Aug-2002 05:01
I have found the above quoted-printable encoding function to be
extremely useful, and thank maxg for making a great function that is not already included in PHP.
(Pity it's hidden all the way over here when it could be found more easily in quoted_printable_decode() )

However, there is one missing character in the code that needs to be included:

Right after the ?Q? there needs to be an extra equal sign in order for the very first character to be translated by the e-mail software.

$string = "=?$charset?Q?=" . $encoded . "?=";
is correct.   

I don't yet have enough experience to speak for other caveats or improvements, but your mileage may vary depending on the e-mail server.

- Luke
maxg at hot dot ee 14-Dec-2001 11:47
I wrote the function that is useful for sending emails for example in cyrillic encoding (wondows-1251, koi8-r and so on).
It converts every symbol in the string into hexadecimal presentation with "=" symbol as delimiter.

For example, the string " " will look like that:
=d0=e5=e3=e8=f1=f2=f0=e0=f6=e8=ee=ed=ed=fb=e9=20=ea=ee=e4=20=e4=eb=ff

I use it for encoding email subject, but it could be modified for anything else.

<?php
function hex4email ($string,$charset)
{
   
$string=bin2hex ($string);
   
$encoded = chunk_split($string, 2, '=');
   
$encoded=preg_replace ("/=$/","",$encoded);
   
$string="=?$charset?Q?".$encoded."?=";
   
return
$string;
}
?>
tightcode at hotmail dot com 25-Aug-2001 08:05
I was just browsing the above and with a little modification,
came up with the following which I believe to be more flexible:

<?php
function bin2hex($data) {
   
$corrected = ereg_replace("[^0-9a-fA-F]","",$data);
    return
pack("H".strlen($corrected),$corrected);
}
?>

This will make sure that whatever you pass, even if it is padded
at the extremeties or between pairs, should return the desired data.
pedram at redhive dot com 31-Jan-2001 05:21
In an attempt to dodge spam bots I've seen people (including myself) hex encode their email addresses in "mailto" tags. This is the small chunk of code I wrote to automate the process:

<?php
function hex_encode ($email_address)    {
       
$encoded = bin2hex("$email_address");
       
$encoded = chunk_split($encoded, 2, '%');
       
$encoded = '%' . substr($encoded, 0, strlen($encoded) - 1);
        return
$encoded;   
}
?>

so for example:
<a href="mailto:&lt;?=hex_encode("pedram@redhive.com")?>">email me</a>

would produce the following address:
%70%65%64%72%61%6d%40%72%65%64%68%69%76%65%2e%63%6f%6d

-pedram

 
show source | credits | sitemap | contact | advertising | mirror sites