how to change to english number to nepali number in php - php

In my project I have to change the english numerals to nepali one upto 2 digits. e.g. if i enter 1 it should return १ and if i enter 41 it should return ४१ and i have to store ४१ in db and show it in front end. How am i to do this? I tried to use "font-family: Preeti;" when getting nepali numerals but it gives ४ and not १. Similarly when I use below function it gives ४ instead of १. How am i to solve this?
function convertNos($nos){
switch($nos){
case"०":return 0;
case"१":return 1;
case"२":return 2;
case"३":return 3;
case"४":return 4;
case"५":return 5;
case"६":return 6;
case"७":return 7;
case"८":return 8;
case"९":return 9;
case"0":return"०";
case"1":return"१";
case"2":return"२";
case"3":return"३";
case"4":return"४";
case"5":return"५";
case"6":return"६";
case"7":return"७";
case"8":return"८";
case"9":return"९";
}
}
Any help/suggestion is welcome.thanks in advance.

/* Set internal character encoding to UTF-8 */
header('Content-Type: text/html; charset=utf-8');
mb_internal_encoding("UTF-8");
// An array of Nepali number representations
function convertNos($nos){
$n = '';
switch($nos){
case "०": $n = 0; break;
case "१": $n = 1; break;
case "२": $n= 2; break;
case "३": $n = 3; break;
case "४": $n = 4; break;
case "५": $n = 5; break;
case "६": $n = 6; break;
case "७": $n = 7; break;
case "८": $n = 8; break;
case "९": $n = 9; break;
case "0": $n = "०"; break;
case "1": $n = "१"; break;
case "2": $n = "२"; break;
case "3": $n = "३"; break;
case "4": $n = "४"; break;
case "5": $n = "५"; break;
case "6": $n = "६"; break;
case "7": $n = "७"; break;
case "8": $n = "८"; break;
case "9": $n = "९"; break;
}
return $n;
}
$num = 0; // get your number
// replace this with whatever you're using to get your number
if (isset($_GET['number'])) $num = strip_tags($_GET['number']);
/* Convert your number (could be a string of unicode,
* not necessarily a digit) into a string and split it
* to get an array of characters.
*/
$str_num = preg_split('//u', ("". $num), -1); // not explode('', ("". $num))
// For each item in your exploded string, retrieve the Nepali equivalent or vice versa.
$out = '';
$out_arr = array_map('convertNos', $str_num);
$out = implode('', $out_arr);
print($out);
// Also make sure your PHP file is saved as a UTF-8 text file

Try utf-8 encoding.
html: <meta charset="utf-8" />
php: header('Content-Type: text/html; charset=utf-8');

Related

php switch between range of numbers does not work

I have this PHP function for changing color between 2 numbers:
function color_switch($number){
switch (true){
case $number == range(1 , 3):
$color = "progress-bar-danger";
break;
case $number == range(3 , 5):
$color = "progress-bar-warning";
break;
case $number == range(5 , 6):
$color = "progress-bar-default";
break;
case $number == range(6 , 8):
$color = "progress-bar-success";
break;
case $number == range(8, 10):
$color = "progress-bar-success";
break;
}
return $color;
}
But in action this function does not work for me. How should I fix this ?
You are comparing range() which is an array, and $number is integer, which is invalid,
Change your function something like,
function color_switch($number) {
switch ($number) { // switching the function argument
case $number <= 3 : // if less than three, execute case
$color = "progress-bar-danger";
break;
case $number <= 5 :
$color = "progress-bar-warning";
break;
case $number <= 6 :
$color = "progress-bar-default";
break;
case $number <= 8 :
$color = "progress-bar-success";
break;
case $number <= 10 :
$color = "progress-bar-success";
break;
}
return $color;
}
Your utilization of switch is incorrect and your utilization of range() is too.
Your parameter of switch should be the variable you evaluate.
Range() will return an array containing the range.
So the correct code is better :
function color_switch($number) {
switch ($number){
case in_array($number, range(1 , 3)):
$color = "progress-bar-danger";
break;
case in_array($number, range(3 , 5)):
$color = "progress-bar-warning";
break;
case in_array($number, range(5 , 6)):
$color = "progress-bar-default";
break;
case in_array($number, range(6 , 8)):
$color = "progress-bar-success";
break;
case in_array($number, range(8 , 10)):
$color = "progress-bar-success";
break;
}
return $color;
}

My PHP code is not working properly

I´m trying to do some program which would transfer hexa do binary. Problem is in changing of A,B,C,..,F to 10,11,12,...,15 so i can work with them as with numbers. I made this function:
function odstran_pismena($pole)
{
$dlzka = count($pole);
for ($i = 0; $i< $dlzka; $i++)
switch ($pole[$i])
{
case 0: break;
case 1: break;
case 2: break;
case 3: break;
case 4: break;
case 5: break;
case 6: break;
case 7: break;
case 8: break;
case 9: break;
case ("A" || "a"): $pole[$i] = 10;
break;
case ("B" || "b"): $pole[$i] = 11;
break;
case ("C" || "c"): $pole[$i] = 12;
break;
case ("D" || "d"): $pole[$i] = 13;
break;
case ("E" || "e"): $pole[$i] = 14;
break;
case ("F" || "f"): $pole[$i] = 15;
break;
default: $pole[$i] = "ERROR";
break;
}
return $pole;
}
First i made array from string, and now i want to change letters to numbers.
I´m testing it with this string: $test = "AbCdEf2345";
I was expecting result 10 11 12 13 14 15 2 3 4 5 but all i have is 10 10 10 10 10 10 2 3 4 5
Am I doing some mystake?(Of course I am, but where?)
("A" || "a") evaluates to boolean value 'true', so all a to f will get caught by the case ("A" || "a" ) and result in 10.
Without using the hexdec() and with minimal change to your code:
function odstran_pismena($pole)
{
$dlzka = count($pole);
for ($i = 0; $i< $dlzka; $i++)
switch ($pole[$i])
{
case 0: break;
case 1: break;
case 2: break;
case 3: break;
case 4: break;
case 5: break;
case 6: break;
case 7: break;
case 8: break;
case 9: break;
case "A":
case "a": $pole[$i] = 10;
break;
case "B":
case "b": $pole[$i] = 11;
break;
case "C":
case "c": $pole[$i] = 12;
break;
case "D":
case "d": $pole[$i] = 13;
break;
case "E":
case "e": $pole[$i] = 14;
break;
case "F":
case "f": $pole[$i] = 15;
break;
default: $pole[$i] = "ERROR";
break;
}
return $pole;
}
When you have specified case ("A" || "a"): $pole[$i] = 10; it evaluates to true. So all your chars matched against true returns true. for 'case' conditions avoid using expressions. Use the static values your comparing such as
case "A":
case "a":
$pole[$i] = 10;
break;
An easy way to help you with that would be to use a strtolower:
switch(strtolower($pole[$i])) {
case "a" :...
break;
case "b": ...
break;
}
or simply, as the first line of your function:
$pole = strtolower($pole);
This way you won't have to bother with upper/lower casing.
You should use hexdec() and replace you whole for loop with:
for ($i = 0; $i< $dlzka; $i++)
{
$pole[$i] = hexdec($pole[$i]);
}
Note that you will receive a 0 for non-valid values so you might have to check for that separately if it can happen, using for example is_numeric on the original value.

MySQL Select Not Returning resource

I am having a small problem with my PHP MySQL Select. The function is inside of a PHP class. Here is the error I get:
Warning: mysql_fetch_array() expects parameter 1 to be resource,
integer given in C:\xampp\htdocs\include\database.php on line 59
Warning: extract() expects parameter 1 to be array, null given in
C:\xampp\htdocs\include\database.php on line 59
The function just simply updates the database to show what browser and OS they visited the site with. The function is called from another file that is called by an AJAX call that uses POST to send the data about the OS and browser that was gathered from a Javascript file. It only fails if there is an entry of the IP address already in the database. If there is no IP Address entry in the database it succeeds in creating one.
Here is my code:
function addStat($browser, $os){
$IE = 0; $Firefox = 0; $Safari = 0; $Opera = 0; $Chrome = 0; $otherb = 0;
$Windows = 0; $Linux = 0; $Mac = 0; $Android = 0; $iOS = 0; $otheros = 0;
$ql = 0; $totalVisits = 0;
$ip = ip2long($_SERVER['REMOTE_ADDR']);
$q1 = mysql_query("SELECT * FROM " . DB_STATS . " WHERE ip='$ip'", $this->connection);
if (mysql_num_rows($q1)==0){
$browser = mysql_real_escape_string($browser);
$os = mysql_real_escape_string($os);
switch($browser){
case "Internet Explorer":
$IE += 1;
break;
case "Firefox":
$Firefox += 1;
break;
case "Safari":
$Safari += 1;
break;
case "Opera":
$Opera += 1;
break;
case "Chrome":
$Chrome += 1;
break;
default:
$otherb += 1;
break;
}
switch($os){
case "Windows":
$Windows += 1;
break;
case "Mac OS X":
$Mac += 1;
break;
case "Linux":
$Linux += 1;
break;
case "Android":
$Android += 1;
break;
case "iOS":
$iOS += 1;
break;
default:
$otheros += 1;
break;
}
$q = $this->query("INSERT INTO " . DB_STATS . " VALUES (null, '$ip', '$Chrome', '$IE', '$Firefox', '$Opera', '$Safari', '$otherb', '$Windows', '$Mac', '$Linux', '$Android' , '$iOS' , '$otheros', 1)");
if ($q == true){
return(1);
}
else{
return(0);
}
}
else if (mysql_num_rows($q1)==1){
extract(mysql_fetch_array($ql));
switch($browser){
case "Internet Explorer":
$IE += 1;
break;
case "Firefox":
$Firefox += 1;
break;
case "Safari":
$Safari += 1;
break;
case "Opera":
$Opera += 1;
break;
case "Chrome":
$Chrome += 1;
break;
default:
$otherb += 1;
break;
}
switch($os){
case "Windows":
$Windows += 1;
break;
case "Mac OS X":
$Mac += 1;
break;
case "Linux":
$Linux += 1;
break;
case "Android":
$Android += 1;
break;
case "iOS":
$iOS += 1;
break;
default:
$otheros += 1;
break;
}
$totalVisits += 1;
$q = $this->query("UPDATE " . DB_STATS . " set Chrome='$Chrome', IE='$IE', Firefox='$Firefox', Opera='$Opera', Safari='$Safari', otherb='$otherb', Windows='$Windows', Mac='$Mac', Linux='$Linux', Android='$Android' , iOS='$iOS' , otheros='$otheros', totalVisits='$totalVisits'");
if ($q == true){
return(1);
}
else{
return(0);
}
}
else{
return(-1);
}
}
I hope everything made sense and that someone will help.
I see it now -- you used $ql (lower case L) when you intend to use $q1. Let this be a lesson against using very short variable names or very similar names.
// $ql was initialized to 0
$ql = 0; $totalVisits = 0;
// $q1 holds the result resource
extract(mysql_fetch_array($q1));
It is not advisable to call extract() on the output of mysql_fetch_array() unless you also specify the second parameter MYSQL_ASSOC as the fetch type. By default it returns both numeric and associative indices for each column.
extract(mysql_fetch_array($q1, MYSQL_ASSOC));
// Or better
extract(mysql_fetch_assoc($q1));
In general, I would probably advise against using extract() in most any situation, since it results in numerous variables dumped into the global namespace, in particular when you have done SELECT * without being specific about which columns are selected. Better to access them via their array:
$row = mysql_fetch_assoc($q1);
echo $row['browser'];

Generating a random numbers and letters

Can I ask for a certain code on how to generate a random letters and numbers in one word. I know there's a PHP function rand(), but I don't know if it's also applicable with letters. There's also a function called mt_rand() but I don't know how it works. I'm planning on generating a word like this one:
$randomcode = re784dfg7ert7;
Do you guys have any simple code on this one? Thanks in advance!
<?php
echo substr(sha1(mt_rand()),17,6); //To Generate Random Numbers with Letters.
?>
This is a more extensive method that I use constantly to generate random numbers, letters or mixed:
function assign_rand_value($num) {
// accepts 1 - 36
switch($num) {
case "1" : $rand_value = "a"; break;
case "2" : $rand_value = "b"; break;
case "3" : $rand_value = "c"; break;
case "4" : $rand_value = "d"; break;
case "5" : $rand_value = "e"; break;
case "6" : $rand_value = "f"; break;
case "7" : $rand_value = "g"; break;
case "8" : $rand_value = "h"; break;
case "9" : $rand_value = "i"; break;
case "10" : $rand_value = "j"; break;
case "11" : $rand_value = "k"; break;
case "12" : $rand_value = "l"; break;
case "13" : $rand_value = "m"; break;
case "14" : $rand_value = "n"; break;
case "15" : $rand_value = "o"; break;
case "16" : $rand_value = "p"; break;
case "17" : $rand_value = "q"; break;
case "18" : $rand_value = "r"; break;
case "19" : $rand_value = "s"; break;
case "20" : $rand_value = "t"; break;
case "21" : $rand_value = "u"; break;
case "22" : $rand_value = "v"; break;
case "23" : $rand_value = "w"; break;
case "24" : $rand_value = "x"; break;
case "25" : $rand_value = "y"; break;
case "26" : $rand_value = "z"; break;
case "27" : $rand_value = "0"; break;
case "28" : $rand_value = "1"; break;
case "29" : $rand_value = "2"; break;
case "30" : $rand_value = "3"; break;
case "31" : $rand_value = "4"; break;
case "32" : $rand_value = "5"; break;
case "33" : $rand_value = "6"; break;
case "34" : $rand_value = "7"; break;
case "35" : $rand_value = "8"; break;
case "36" : $rand_value = "9"; break;
}
return $rand_value;
}
function get_rand_alphanumeric($length) {
if ($length>0) {
$rand_id="";
for ($i=1; $i<=$length; $i++) {
mt_srand((double)microtime() * 1000000);
$num = mt_rand(1,36);
$rand_id .= assign_rand_value($num);
}
}
return $rand_id;
}
function get_rand_numbers($length) {
if ($length>0) {
$rand_id="";
for($i=1; $i<=$length; $i++) {
mt_srand((double)microtime() * 1000000);
$num = mt_rand(27,36);
$rand_id .= assign_rand_value($num);
}
}
return $rand_id;
}
function get_rand_letters($length) {
if ($length>0) {
$rand_id="";
for($i=1; $i<=$length; $i++) {
mt_srand((double)microtime() * 1000000);
$num = mt_rand(1,26);
$rand_id .= assign_rand_value($num);
}
}
return $rand_id;
}
USAGE:
Basically I have a main function with the array, then I call secondary functions to build my string based on the length parameter:
Letters:
$str = get_rand_letters(8); // Only Letters
Numbers:
$str = get_rand_numbers(8); // Only Numbers
AlphaNumeric:
$str = get_rand_alphanumeric(8); // Numbers and Letters
This Question is answered by Kerrek SB, but this may help someone searching for a more extensive and flexible way.
Step 1: Create an alphabet, $alph = "0123456789abcde...";.
Step 2: Create a random number, $n = rand(0, ALPHSIZE-1);, or use mt_rand().
Step 3: Get the appropriate index in the alphabet: $alph[n];
Rinse and repeat steps 2 and 3 for as many times as you need characters.
If you want strong statistical properties (like uniformness), you should work a little harder with the random number, but this should get you started. (I think the statistical properties of that should be sufficient.)
OK, might as well spell it out:
$alph = "012...";
function make_random_string($N)
{
$s = "";
for ($i = 0; $i != $N; ++$i)
s .= $alph[mt_rand(0, ALPHSIZE - 1)];
return $s;
}
And here's the version that takes a custom alphabet:
function make_random_custom_string($N, $alphabet)
{
$s = "";
for ($i = 0; $i != $N; ++$i)
s .= $alphabet[mt_rand(0, strlen($alphabet) - 1)];
return $s;
}
Example: 10 random odd digits: make_random_custom_string(10, "13579");
Use uniqid
$desired_length = 10; //or whatever length you want
$unique = uniqid();
$your_random_word = substr($unique, 0, $desired_length);
It might be done this way:
function RandomCode($length = 10)
{
$code = '';
$total = 0;
do
{
if (rand(0, 1) == 0)
{
$code.= chr(rand(97, 122)); // ASCII code from **a(97)** to **z(122)**
}
else
{
$code.= rand(0, 9); // Numbers!!
}
$total++;
} while ($total < $length);
return $code;
}
This was an easy way for me- this generates a 15 character string -
$alph = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$code='';
for($i=0;$i<15;$i++){
$code .= $alph[rand(0, 35)];
}
Try this, it worked for me.
$numLenth = 35;
function make_seed_Token() {
list($usec, $sec) = explode(' ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed_Token());
$numSeed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$getNumber = "";
for($i = 0; $i < $numLenth; $i ++) {
$getNumber .= $numSeed[rand(0, strlen($numSeed))];
}
echo $getNumber;
What about this simple code.
This will generate 10 characters,you can limit characters by modifying the limits (0,10)
$str = substr(md5(time()), 0, 10);
echo $str; //7aca159655
echo bin2hex(openssl_random_pseudo_bytes(12));
function randText($len=4){
$str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
for($i=0;$i<$len;$i++){
$txt.=substr($str, rand(0, strlen($str)), 1);
}
return $txt;
}
to use simply type:
$yourVar = randText(10); // to get 10char long text
I put together a PHP class for generating random numbers and strings PHPRandomValue,
It uses "mcrypt_create_iv(4, MCRYPT_DEV_URANDOM)" to generate random numbers and values. I made it while working on a crypto project because I needed a safe random value generator and mt_rand() doesn't meet that requirement. Here's an example usage
$randomValue = new RandomValue;
$randomValue->randomNumber(): = -3880998
$randomValue->randomNumberBetween(1,10): = 2
$randomValue->randomTextString(): = CfCkKDHRgUULdGWcSqP4
$randomValue->randomTextString(10): = LorPIxaeEY
$randomValue->randomKey(): = C7al8tX9.gqYLf2ImVt/!$NOY79T5sNCT/6Q.$!.6Gf/Q5zpa3
$randomValue->randomKey(10): = RDV.dc6Ai/
This will create random alpha num string based on variable chars:
function createRandomCode()
{
$chars = "abcdefghijkmnopqrstuvwxyz023456789";
srand((double) microtime() * 1000000);
$i = 0;
$pass = '';
while ($i <= 7)
{
$num = rand() % 33;
$tmp = substr($chars, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
Use this function as $random = createRandomCode();
// A string with random letters and numbers. A-Z, a-z, 0-9
// A function in PHP is a block of code that can be used elsewhere in code.
// This function is called rand_string and will generate a random sequence of characters in one string.
// A default value of 16 characters is set, so that if no integer is supplied it will use the value of 16.
function rand_string($length = 16) {
// A string is something that holds alphanumeric characters and other symbols.
// This string is an empty one, or at least that's how it starts.
$string = '';
// This is known as a for/next loop, it's will run a section of code for a set number of times.
// A counter $i is incremented on each pass. In this case until it has operated $length number of times.
for ($i = 0; $i < $length; $i++) {
// This variable ($die) is assigned a random number - which is obtained via the PHP function mt_rand.
//Consult the PHP docs for more information.
$die = mt_rand(1, 3);
// This switch statement picks a case that is true and runs the accompanying code as defined in each case.
switch ($die) {
// This case will be activated if the variable $die has the value of 1. And case 2 if it has the value of 2 and so on.
case 1:
// Here and subsequently a random value between 48 and 57 is assigned to the $rnd variable.
$rnd = mt_rand(48, 57);
break;
case 2:
$rnd = mt_rand(65, 90);
break;
case 3:
$rnd = mt_rand(97, 122);
break;
}
// This is another variable $string which is assigned the ASCII character that is represented by the $rnd variable.
// ASCII characters are codes that computers use to represent characters and symbols.
// The chr function is a special PHP function that returns the character represented by the ASCII code.
// In this case the value of $rnd.
$string .= chr($rnd);
}
// Here we reach the final result. The value of $string is returned to source of the function call.
return $string;
}
// Segments of the function, loops and switches are enclosed between curly brackets {}. This limits the scope of the processing contained within.
// Usage of this function to obtain a 10 character random string.
// echo is a function that prints the result to the browser/screen.
$mystring = rand_string(10);
echo $mystring;
Easiest way to do this with full control:
<?php
$str = 'QaR0SbT1UcV2WdX3YeZ4f5g6h7i8j9kAlBmCnDoEpFqGrHsItJuKvLwMxNyOzP';
// a-z 0-9 A-Z in above string
$shuffled = str_shuffle($str);
$shuffled = substr($shuffled,1,30);
echo $shuffled;
?>
Change $str according to your needs. I used small alphabets a to z, capital alphabets A to Z and numeric values 0 to 9.

PHP change locale settings?

is there any way to edit/change the default locale setting in localeconv()?
I would like to use the the money_format function, and it works fine, but the locales for my language/region are not correct.
To be more precise, for Croatia, we use the currency symbol after the number, not before like set in local values?
Are there any ways I can edit this? Or at least manually check, change values, and send new values to setlocale()?
Working on shared hosting btw.
number_format() has nothing to do with currency symbols, you probably meant money_format(), but ... well - just use number_format() and append whatever currency symbol you want to the return value.
If anyone is interested, I made it work with my own replacement of the money_format() function.
It is basically copy-paste from here with added parameters for forceRight and noSpace
class Helper_Locales
{
public static function formatNumber($number, $isMoney=false, $forceRight=false, $noSpace=false) {
$lg = isset($lg) ? $lg : setlocale(LC_MONETARY, '0');
$ret = setLocale(LC_ALL, $lg);
setLocale(LC_TIME, 'Europe/Paris');
if ($ret===FALSE) {
echo "Language '$lg' is not supported by this system.\n";
return;
}
$LocaleConfig = localeConv();
forEach($LocaleConfig as $key => $val) $$key = $val;
// Sign specifications:
if ($number>=0) {
$sign = $positive_sign;
$sign_posn = $p_sign_posn;
$sep_by_space = $p_sep_by_space;
$cs_precedes = $p_cs_precedes;
} else {
$sign = $negative_sign;
$sign_posn = $n_sign_posn;
$sep_by_space = $n_sep_by_space;
$cs_precedes = $n_cs_precedes;
}
// Number format:
$n = number_format(abs($number), $frac_digits,
$decimal_point, $thousands_sep);
$n = str_replace(' ', ' ', $n);
switch($sign_posn) {
case 0: $n = "($n)"; break;
case 1: $n = "$sign$n"; break;
case 2: $n = "$n$sign"; break;
case 3: $n = "$sign$n"; break;
case 4: $n = "$n$sign"; break;
default: $n = "$n [error sign_posn=$sign_posn !]";
}
// Currency format:
$currency_symbol = strtolower($currency_symbol);
$m = number_format(abs($number), $frac_digits,
$mon_decimal_point, $mon_thousands_sep);
if ($sep_by_space && !$noSpace) $space = ' '; else $space = '';
if ($cs_precedes && !$forceRight) $m = "$currency_symbol$space$m";
else $m = "$m$space$currency_symbol";
$m = str_replace(' ', ' ', $m);
switch($sign_posn) {
case 0: $m = "($m)"; break;
case 1: $m = "$sign$m"; break;
case 2: $m = "$m$sign"; break;
case 3: $m = "$sign$m"; break;
case 4: $m = "$m$sign"; break;
default: $m = "$m [error sign_posn=$sign_posn !]";
}
if ($isMoney) return $m; else return $n;
}
}

Categories