PHP String Functions (All on One Page)
addcslashes() — Quote string with slashes in a C style
addslashes() — Quote string with slashes
bin2hex() — Convert binary data into hexadecimal representation
chop() — Alias of rtrim
chr() — Generate a single-byte string from a number
chunk_split() — Split a string into smaller chunks
convert_cyr_string() — Convert from one Cyrillic character set to another
convert_uudecode() — Decode a uuencoded string
convert_uuencode() — Uuencode a string
count_chars() — Return information about characters used in a string
crc32() — Calculates the crc32 polynomial of a string
crypt() — One-way string hashing
echo() — Output one or more strings
explode() — Split a string by a string
fprintf() — Write a formatted string to a stream
get_html_translation_table() — Returns the translation table used by htmlspecialchars and htmlentities
hebrev() — Convert logical Hebrew text to visual text
hebrevc() — Convert logical Hebrew text to visual text with newline conversion
hex2bin() — Decodes a hexadecimally encoded binary string
html_entity_decode() — Convert HTML entities to their corresponding characters
htmlentities() — Convert all applicable characters to HTML entities
htmlspecialchars_decode() — Convert special HTML entities back to characters
htmlspecialchars() — Convert special characters to HTML entities
implode() — Join array elements with a string
join() — Alias of implode
lcfirst() — Make a string’s first character lowercase
levenshtein() — Calculate Levenshtein distance between two strings
localeconv() — Get numeric formatting information
ltrim() — Strip whitespace (or other characters) from the beginning of a string
md5_file() — Calculates the md5 hash of a given file
md5() — Calculate the md5 hash of a string
metaphone() — Calculate the metaphone key of a string
money_format() — Formats a number as a currency string
nl_langinfo() — Query language and locale information
nl2br() — Inserts HTML line breaks before all newlines in a string
number_format() — Format a number with grouped thousands
ord() — Convert the first byte of a string to a value between 0 and 255
parse_str() — Parses the string into variables
print() — Output a string
printf() — Output a formatted string
quoted_printable_decode() — Convert a quoted-printable string to an 8 bit string
quoted_printable_encode() — Convert a 8 bit string to a quoted-printable string
quotemeta() — Quote meta characters
rtrim() — Strip whitespace (or other characters) from the end of a string
setlocale() — Set locale information
sha1_file() — Calculate the sha1 hash of a file
sha1() — Calculate the sha1 hash of a string
similar_text() — Calculate the similarity between two strings
soundex() — Calculate the soundex key of a string
sprintf() — Return a formatted string
sscanf() — Parses input from a string according to a format
str_getcsv() — Parse a CSV string into an array
str_ireplace() — Case-insensitive version of str_replace
str_pad() — Pad a string to a certain length with another string
str_repeat() — Repeat a string
str_replace() — Replace all occurrences of the search string with the replacement string
str_rot13() — Perform the rot13 transform on a string
str_shuffle() — Randomly shuffles a string
str_split() — Convert a string to an array
str_word_count() — Return information about words used in a string
strcasecmp() — Binary safe case-insensitive string comparison
strchr() — Alias of strstr
strcmp() — Binary safe string comparison
strcoll() — Locale based string comparison
strcspn() — Find length of initial segment not matching mask
strip_tags() — Strip HTML and PHP tags from a string
stripcslashes() — Un-quote string quoted with addcslashes
stripos() — Find the position of the first occurrence of a case-insensitive substring in a string
stripslashes() — Un-quotes a quoted string
stristr() — Case-insensitive strstr
strlen() — Get string length
strnatcasecmp() — Case insensitive string comparisons using a “natural order” algorithm
strnatcmp() — String comparisons using a “natural order” algorithm
strncasecmp() — Binary safe case-insensitive string comparison of the first n characters
strncmp() — Binary safe string comparison of the first n characters
strpbrk() — Search a string for any of a set of characters
strpos() — Find the position of the first occurrence of a substring in a string
strrchr() — Find the last occurrence of a character in a string
strrev() — Reverse a string
strripos() — Find the position of the last occurrence of a case-insensitive substring in a string
strrpos() — Find the position of the last occurrence of a substring in a string
strspn() — Finds the length of the initial segment of a string consisting entirely of characters contained within a given mask
strstr() — Find the first occurrence of a string
strtok() — Tokenize string
strtolower() — Make a string lowercase
strtoupper() — Make a string uppercase
strtr() — Translate characters or replace substrings
substr_compare() — Binary safe comparison of two strings from an offset, up to length characters
substr_count() — Count the number of substring occurrences
substr_replace() — Replace text within a portion of a string
substr() — Return part of a string
trim() — Strip whitespace (or other characters) from the beginning and end of a string
ucfirst() — Make a string’s first character uppercase
ucwords() — Uppercase the first character of each word in a string
vfprintf() — Write a formatted string to a stream
vprintf() — Output a formatted string
vsprintf() — Return a formatted string
wordwrap() — Wraps a string to a given number of characters
PHP addcslashes()
Function
What does addcslashes()
do?
The PHP
function will give you a string with backslashes before characters that are listed in addcslashes()
charlist
parameter.
PHP addcslashes()
Syntax
addcslashes ( string $str , string $charlist ) : string
PHP addcslashes()
Parameters
str
— The string to be escaped.charlist
— A list of characters to be escaped. If charlist contains characters \n, \r etc., they are converted in C-like style, while other non-alphanumeric characters with ASCII codes lower than 32 and higher than 126 converted to octal representation.
PHP addcslashes()
Return Value
The PHP addcslashes()
function returns the escaped string.
PHP addcslashes()
Working Examples
1. addcslashes() example
<?php
$escaped = addcslashes($not_escaped, "\0..\37!@\177..\377");
?>
Changelog for PHP addcslashes() Function
5.2.5 — The escape sequences \v and \f were added.
PHP addslashes()
Function
What does addslashes()
do?
The PHP
function will give you a string with backslashes added before characters that need to be escaped. These characters are:addslashes()
PHP addslashes()
Syntax
addslashes ( string $str ) : string
PHP addslashes()
Parameters
str
— The string to be escaped.
PHP addslashes()
Return Value
The PHP addslashes()
function returns the escaped string.
PHP addslashes()
Working Examples
1. An addslashes() example
<?php
$str = "Is your name O'Reilly?";
// Outputs: Is your name O\'Reilly?
echo addslashes($str);
?>
Additional Tips from Fellow Developers
Contributed By: wyattstorch42
@ mark at hagers dot demon dot nl :
You shouldn't use str_replace() for this. Use a function like htmlentities(), which will properly encode all user input for fields. That way, it will also work if the user types &, <, >, etc.
Contributed By: roysimke
Never use addslashes function to escape values you are going to send to mysql. use mysql_real_escape_string or pg_escape at least if you are not using prepared queries yet.
keep in mind that single quote is not the only special character that can break your sql query. and quotes are the only thing which addslashes care.
Contributed By: svenr
To output a PHP variable to Javascript, use json_encode().
<?php
$var = "He said \"Hello O'Reilly\" & disappeared.\nNext line...";
echo "alert(".json_encode($var).");\n";
?>
Output:
alert("He said \"Hello O'Reilly\" & disappeared.\nNext line...") ;
Contributed By: mark
I was stumped for a long time by the fact that even when using addslashes and stripslashes explicitly on the field values double quotes (") still didn't seem to show up in strings read from a database. Until I looked at the source, and realised that the field value is just truncated at the first occurrence of a double quote. the remainder of the string is there (in the source), but is ignored when the form is displayed and submitted.
This can easily be solved by replacing double quotes with """ when building the form. like this:
$fld_value = str_replace ( "\"", """, $src_string ) ;
The reverse replacement after the form submission is not necessary.
PHP bin2hex()
Function
What does bin2hex()
do?
The PHP
function will convert binary data into hexadecimal representation.bin2hex()
PHP bin2hex()
Syntax
bin2hex ( string $str ) : string
PHP bin2hex()
Parameters
str
— A string.
PHP bin2hex()
Return Value
The PHP bin2hex()
function returns the hexadecimal representation of the given string.
Additional Tips from Fellow Developers
Contributed By: tehjosh
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.
PHP chop()
Function
What does chop()
do?
The PHP
function will this function is an alias of: chop()
rtrim()
.
PHP chop()
Syntax
PHP chop()
Parameters
This function does not accept any parameters.
Important Points about PHP chop()
Function
chop()
is different than the Perlchop()
function, which removes the last character in the string.
Additional Tips from Fellow Developers
Contributed By: Kubo2
Rather use rtrim(). Usage of chop() is not very clear nor consistent for people reading the code after you.
Contributed By: JumpIfBelow
If you are searching for a function that does the same trick as chop in PERL, then you should just do the following code:
<?php
$str = substr($str, 0, -1);
?>
The question is: why isn't chop() an alias of the code above, rather than something which will trap developpers?
PHP chr()
Function
What does chr()
do?
The PHP
function will generate a single-byte string from a number.chr()
PHP chr()
Syntax
chr ( int $bytevalue ) : string
PHP chr()
Parameters
bytevalue
— An integer between 0 and 255.
PHP chr()
Return Value
The PHP chr()
function returns a single-character string containing the specified byte.
PHP chr()
Working Examples
1. chr() example
<?php
// Assumes the string will be used as ASCII or an ASCII-compatible encoding
$str = "The string ends in escape: ";
$str .= chr(27); /* add an escape character at the end of $str */
/* Often this is more useful */
$str = sprintf("The string ends in escape: %c", 27);
?>
2. Overflow behavior
<?php
echo chr(-159), chr(833), PHP_EOL;
?>
Output of the above code:
aA
3. Building a UTF-8 string from individual bytes
<?php
declare(encoding='UTF-8');
$str = chr(240) . chr(159) . chr(144) . chr(152);
echo $str;
?>
Output of the above code:
🐘
Additional Tips from Fellow Developers
Contributed By: perrodin
Note that if the number is higher than 256, it will return the number mod 256.
For example :
chr(321)=A because A=65(256)
PHP chunk_split()
Function
What does chunk_split()
do?
The PHP
function will can be used to split a string into smaller chunks which is useful for e.g. converting chunk_split()
base64_encode()
output to match RFC 2045 semantics. It inserts end
every chunklen
characters.
PHP chunk_split()
Syntax
chunk_split ( string $body [, int $chunklen = 76 [, string $end = "\r\n" ]] ) : string
PHP chunk_split()
Parameters
body
— The string to be chunked.chunklen
— The chunk length.end
— The line ending sequence.
PHP chunk_split()
Return Value
The PHP chunk_split()
function returns the chunked string.
PHP chunk_split()
Working Examples
1. chunk_split() example
<?php
// format $data using RFC 2045 semantics
$new_string = chunk_split(base64_encode($data));
?>
Additional Tips from Fellow Developers
Contributed By:
An alternative for unicode strings;
<?php
function chunk_split_unicode($str, $l = 76, $e = "\r\n") {
$tmp = array_chunk(
preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $l);
$str = "";
foreach ($tmp as $t) {
$str .= join("", $t) . $e;
}
return $str;
}
$str = "Yarım kilo çay, yarım kilo şeker";
echo chunk_split($str, 4) ."\n";
echo chunk_split_unicode($str, 4);
?>
Yar�
�m k
ilo
çay
, ya
rım
kil
o ş
eker
Yarı
m ki
lo ç
ay,
yarı
m ki
lo ş
eker
PHP convert_cyr_string()
Function
What does convert_cyr_string()
do?
The PHP
function will convert from one Cyrillic character set to another.convert_cyr_string()
PHP convert_cyr_string()
Syntax
convert_cyr_string ( string $str , string $from , string $to ) : string
PHP convert_cyr_string()
Parameters
str
— The string to be converted.from
— The source Cyrillic character set, as a single character.to
— The target Cyrillic character set, as a single character.
PHP convert_cyr_string()
Return Value
The PHP convert_cyr_string()
function returns the converted string.
PHP convert_uudecode()
Function
What does convert_uudecode()
do?
The PHP
function will convert_uudecode()
convert_uudecode()
decodes a uuencoded string.
PHP convert_uudecode()
Syntax
convert_uudecode ( string $data ) : string
PHP convert_uudecode()
Parameters
data
— The uuencoded data.
PHP convert_uudecode()
Return Value
The PHP convert_uudecode()
function returns the decoded data as a string or FALSE
on failure.
PHP convert_uudecode()
Working Examples
1. convert_uudecode() example
<?php
echo convert_uudecode("+22!L;W9E(%!(4\"$`\n`");
?>
Output of the above code:
I love PHP!
PHP convert_uuencode()
Function
What does convert_uuencode()
do?
The PHP
function will convert_uuencode()
convert_uuencode()
encodes a string using the uuencode algorithm.
PHP convert_uuencode()
Syntax
convert_uuencode ( string $data ) : string
PHP convert_uuencode()
Parameters
data
— The data to be encoded.
PHP convert_uuencode()
Return Value
The PHP convert_uuencode()
function returns the uuencoded data or FALSE
on failure.
PHP convert_uuencode()
Working Examples
1. convert_uuencode() example
<?php
$some_string = "test\ntext text\r\n";
echo convert_uuencode($some_string);
?>
Output of the above code:
0=&5S=`IT97AT('1E>'0-"@``
`
Additional Tips from Fellow Developers
Contributed By: root
@Craig's note: base64_encode() is better suited for that. In fact, it produces smaller output and operates slightly faster. I did a little benchmark -- here are my findings:
File: JPG, 631614 bytes
== Base64 ==
execution time: 0.0039639472961426 secs
output length: 842152
== UUencode ==
execution time: 0.004105806350708 secs
output length: 870226
PHP count_chars()
Function
What does count_chars()
do?
The PHP
function will give youcount_chars()
PHP count_chars()
Syntax
count_chars ( string $string [, int $mode = 0 ] ) : mixed
PHP count_chars()
Parameters
string
— The examined string.mode
— See return values.
PHP count_chars()
Return Value
The PHP count_chars()
function returns one of the following:
PHP count_chars()
Working Examples
1. count_chars() example
<?php
$data = "Two Ts and one F.";
foreach (count_chars($data, 1) as $i => $val) {
echo "There were $val instance(s) of \"" , chr($i) , "\" in the string.\n";
}
?>
Output of the above code:
There were 4 instance(s) of " " in the string.
There were 1 instance(s) of "." in the string.
There were 1 instance(s) of "F" in the string.
There were 2 instance(s) of "T" in the string.
There were 1 instance(s) of "a" in the string.
There were 1 instance(s) of "d" in the string.
There were 1 instance(s) of "e" in the string.
There were 2 instance(s) of "n" in the string.
There were 2 instance(s) of "o" in the string.
There were 1 instance(s) of "s" in the string.
There were 1 instance(s) of "w" in the string.
Additional Tips from Fellow Developers
Contributed By: marcus33cz
If you have problems using count_chars with a multibyte string, you can change the page encoding. Alternatively, you can also use this mb_count_chars version of the function. Basically it is mode "1" of the original function.
<?php
/**
* Counts character occurences in a multibyte string
* @param string $input UTF-8 data
* @return array associative array of characters.
*/
function mb_count_chars($input) {
$l = mb_strlen($input, 'UTF-8');
$unique = array();
for($i = 0; $i < $l; $i++) {
$char = mb_substr($input, $i, 1, 'UTF-8');
if(!array_key_exists($char, $unique))
$unique[$char] = 0;
$unique[$char]++;
}
return $unique;
}
$input = "Let's try some Greek letters: αααααΕεΙιΜμΨψ, Russian: ЙЙЫЫЩН, Czech: ěščřžýáíé";
print_r( mb_count_chars($input) );
//returns: Array ( [L] => 1 [e] => 7 [t] => 4 ['] => 1 [s] => 5 [ ] => 9 [r] => 3 [y] => 1 [o] => 1 [m] => 1 [G] => 1 [k] => 1 [l] => 1 [:] => 3 [α] => 5 [Ε] => 1 [ε] => 1 [Ι] => 1 [ι] => 1 [Μ] => 1 [μ] => 1 [Ψ] => 1 [ψ] => 1 [,] => 2 [R] => 1 [u] => 1 [i] => 1 [a] => 1 [n] => 1 [Й] => 2 [Ы] => 2 [Щ] => 1 [Н] => 1 [C] => 1 [z] => 1 [c] => 1 [h] => 1 [ě] => 1 [š] => 1 [č] => 1 [ř] => 1 [ž] => 1 [ý] => 1 [á] => 1 [í] => 1 [é] => 1 )
?>
PHP crc32()
Function
What does crc32()
do?
The PHP
function will calculates the crc32 polynomial of a string.crc32()
PHP crc32()
Syntax
crc32 ( string $str ) : int
PHP crc32()
Parameters
str
— The data.
PHP crc32()
Return Value
The PHP crc32()
function returns the crc32 checksum of str
as an integer.
PHP crc32()
Working Examples
1. Displaying a crc32 checksum
<?php
$checksum = crc32("The quick brown fox jumped over the lazy dog.");
printf("%u\n", $checksum);
?>
Important Points about PHP crc32()
Function
Because PHP’s integer type is signed many crc32 checksums will result in negative integers on 32bit platforms. On 64bit installations all
crc32()
results will be positive integers though.So you need to use the “%u” formatter of
sprintf()
orprintf()
to get the string representation of the unsignedcrc32()
checksum in decimal format.For a hexadecimal representation of the checksum you can either use the “%x” formatter of
sprintf()
orprintf()
or thedechex()
conversion functions, both of these also take care of converting thecrc32()
result to an unsigned integer.Having 64bit installations also return negative integers for higher result values was considered but would break the hexadecimal conversion as negatives would get an extra 0xFFFFFFFF######## offset then. As hexadecimal representation seems to be the most common use case we decided to not break this even if it breaks direct decimal comparisons in about 50% of the cases when moving from 32 to 64bits.
In retrospect having the function return an integer maybe wasn’t the best idea and returning a hex string representation right away (as e.g.
md5()
does) might have been a better plan to begin with.For a more portable solution you may also consider the generic
hash()
.hash("crc32b", $str)
will return the same string asstr_pad(dechex(crc32($str)), 8, '0', STR_PAD_LEFT)
.
PHP crypt()
Function
What does crypt()
do?
The PHP
function will give you a hashed string using the standard Unix DES-based algorithm or alternative algorithms that may be available on the system.crypt()
PHP crypt()
Syntax
crypt ( string $str [, string $salt ] ) : string
PHP crypt()
Parameters
str
— The string to be hashed.salt
— An optional salt string to base the hashing on. If not provided, the behaviour is defined by the algorithm implementation and can lead to unexpected results.
PHP crypt()
Return Value
The PHP crypt()
function returns the hashed string or a string that is shorter than 13 characters and is guaranteed to differ from the salt on failure.
PHP crypt()
Working Examples
1. crypt() examples
<?php
$hashed_password = crypt('mypassword'); // let the salt be automatically generated
/* You should pass the entire results of crypt() as the salt for comparing a
password, to avoid problems when different hashing algorithms are used. (As
it says above, standard DES-based password hashing uses a 2-character salt,
but MD5-based hashing uses 12.) */
if (hash_equals($hashed_password, crypt($user_input, $hashed_password))) {
echo "Password verified!";
}
?>
2. Using crypt() with htpasswd
<?php
// Set the password
$password = 'mypassword';
// Get the hash, letting the salt be automatically generated
$hash = crypt($password);
?>
3. Using crypt() with different hash types
<?php
/* These salts are examples only, and should not be used verbatim in your code.
You should generate a distinct, correctly-formatted salt for each password.
*/
if (CRYPT_STD_DES == 1) {
echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n";
}
if (CRYPT_EXT_DES == 1) {
echo 'Extended DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . "\n";
}
if (CRYPT_MD5 == 1) {
echo 'MD5: ' . crypt('rasmuslerdorf', '$1$rasmusle$') . "\n";
}
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";
}
if (CRYPT_SHA256 == 1) {
echo 'SHA-256: ' . crypt('rasmuslerdorf', '$5$rounds=5000$usesomesillystringforsalt$') . "\n";
}
if (CRYPT_SHA512 == 1) {
echo 'SHA-512: ' . crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$') . "\n";
}
?>
Output of the above code:
Standard DES: rl.3StKT.4T8M
Extended DES: _J9..rasmBYk8r9AiWNc
MD5: $1$rasmusle$rISCgZzpwk3UhDidwXvin0
Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
SHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
Changelog for PHP crypt() Function
5.6.5 — When the failure string “*0” is given as the salt
, “*1” will now be returned for consistency with other crypt implementations. Prior to this version, PHP 5.6 would incorrectly return a DES hash.
5.6.0 — Raise E_NOTICE security warning if salt
is omitted.
5.5.21 — When the failure string “*0” is given as the salt
, “*1” will now be returned for consistency with other crypt implementations. Prior to this version, PHP 5.5 (and earlier branches) would incorrectly return a DES hash.
5.3.7 — Added $2x$ and $2y$ Blowfish modes to deal with potential high-bit attacks.
5.3.2 — Added SHA-256 and SHA-512 crypt based on Ulrich Drepper’s » implementation.
5.3.2 — Fixed Blowfish behaviour on invalid rounds to return “failure” string (“*0” or “*1”), instead of falling back to DES.
5.3.0 — PHP now contains its own implementation for the MD5 crypt, Standard DES, Extended DES and the Blowfish algorithms and will use that if the system lacks of support for one or more of the algorithms.
Important Points about PHP crypt()
Function
This function is not (yet) binary safe!
As of PHP 5.3.0, PHP contains its own implementation and will use that if the system lacks of support for one or more of the algorithms.
Using the
CRYPT_BLOWFISH
algorithm, will result in thestr
parameter being truncated to a maximum length of 72 characters.When validating passwords, a string comparison function that isn’t vulnerable to timing attacks should be used to compare the output of
crypt()
to the previously known hash. PHP 5.6 onwards provideshash_equals()
for this purpose.
Additional Tips from Fellow Developers
Contributed By: bob dot orr
The #2 comment on this comments page (as of Feb 2015) is 9 years old and recommends phpass. I have independently security audited this product and, while it continues to be recommended for password security, it is actually insecure and should NOT be used. It hasn't seen any updates in years (still at v0.3) and there are more recent alternatives such as using the newer built-in PHP password_hash() function that are much better. Everyone, please take a few moments to confirm what I'm saying is accurate (i.e. review the phpass code for yourself) and then click the down arrow to sink the phpass comment to the bottom. You'll be increasing security across the Internet by doing so.
For those who want details: md5() with microtime() are a fallback position within the source code of phpass. Instead of terminating, it continues to execute code. The author's intentions of trying to work everywhere are admirable but, when it comes to application security, that stance actually backfires. The only correct answer in a security context is to terminate the application rather than fallback to a weak position that can potentially be exploited (usually by forcing that weaker position to happen).
Contributed By: Marten Jacobs
As I understand it, blowfish is generally seen a secure hashing algorithm, even for enterprise use (correct me if I'm wrong). Because of this, I created functions to create and check secure password hashes using this algorithm, and using the (also deemed cryptographically secure) openssl_random_pseudo_bytes function to generate the salt.
<?php
/*
* Generate a secure hash for a given password. The cost is passed
* to the blowfish algorithm. Check the PHP manual page for crypt to
* find more information about this setting.
*/
function generate_hash($password, $cost=11){
/* To generate the salt, first generate enough random bytes. Because
* base64 returns one character for each 6 bits, the we should generate
* at least 22*6/8=16.5 bytes, so we generate 17. Then we get the first
* 22 base64 characters
*/
$salt=substr(base64_encode(openssl_random_pseudo_bytes(17)),0,22);
/* As blowfish takes a salt with the alphabet ./A-Za-z0-9 we have to
* replace any '+' in the base64 string with '.'. We don't have to do
* anything about the '=', as this only occurs when the b64 string is
* padded, which is always after the first 22 characters.
*/
$salt=str_replace("+",".",$salt);
/* Next, create a string that will be passed to crypt, containing all
* of the settings, separated by dollar signs
*/
$param='$'.implode('$',array(
"2y", //select the most secure version of blowfish (>=PHP 5.3.7)
str_pad($cost,2,"0",STR_PAD_LEFT), //add the cost in two digits
$salt //add the salt
));
//now do the actual hashing
return crypt($password,$param);
}
/*
* Check the password against a hash generated by the generate_hash
* function.
*/
function validate_pw($password, $hash){
/* Regenerating the with an available hash as the options parameter should
* produce the same hash if the same password is passed.
*/
return crypt($password, $hash)==$hash;
}
?>
PHP echo()
Function
What does echo()
do?
The PHP
function will outputs all parameters. No additional newline is appended.echo()
PHP echo()
Syntax
echo ( string $arg1 [, string $... ] ) : void
PHP echo()
Parameters
arg1
— The parameter to output....
—
PHP echo()
Return Value
The PHP echo()
function returns d.
PHP echo()
Working Examples
1. echo examples
<?php
echo "Hello World";
// Strings can either be passed individually as multiple arguments or
// concatenated together and passed as a single argument
echo 'This ', 'string ', 'was ', 'made ', 'with multiple parameters.', chr(10);
echo 'This ' . 'string ' . 'was ' . 'made ' . 'with concatenation.' . "\n";
// Because echo does not behave like a function, the following code is invalid.
($some_var) ? echo 'true' : echo 'false';
// However, the following examples will work:
($some_var) ? print 'true' : print 'false'; // print is also a construct, but
// it behaves like a function, so
// it may be used in this context.
echo $some_var ? 'true': 'false'; // changing the statement around
?>
PHP explode()
Function
What does explode()
do?
The PHP
function will give you an array of strings, each of which is a substring of explode()
string
formed by splitting it on boundaries formed by the string delimiter
.
PHP explode()
Syntax
explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] ) : array
PHP explode()
Parameters
delimiter
— The boundary string.string
— The input string.limit
— If limit is set and positive, the returned array will contain a maximum of limit elements with the last element containing the rest of string.
PHP explode()
Return Value
The PHP explode()
function returns an array of strings created by splitting the string
parameter on boundaries formed by the delimiter
.
PHP explode()
Working Examples
1. explode() examples
<?php
// Example 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
// Example 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user; // foo
echo $pass; // *
?>
2. explode() return examples
<?php
/*
A string that doesn't contain the delimiter will simply
return a one-length array of the original string.
*/
$input1 = "hello";
$input2 = "hello,there";
$input3 = ',';
var_dump( explode( ',', $input1 ) );
var_dump( explode( ',', $input2 ) );
var_dump( explode( ',', $input3 ) );
?>
Output of the above code:
array(1)
(
[0] => string(5) "hello"
)
array(2)
(
[0] => string(5) "hello"
[1] => string(5) "there"
)
array(2)
(
[0] => string(0) ""
[1] => string(0) ""
)
3. limit parameter examples
<?php
$str = 'one|two|three|four';
// positive limit
print_r(explode('|', $str, 2));
// negative limit (since PHP 5.1)
print_r(explode('|', $str, -1));
?>
Output of the above code:
Array
(
[0] => one
[1] => two|three|four
)
Array
(
[0] => one
[1] => two
[2] => three
)
Changelog for PHP explode() Function
5.1.0 — Support for negative limit
s was added
Important Points about PHP explode()
Function
Although
implode()
can, for historical reasons, accept its parameters in either order,explode()
cannot. You must ensure that thedelimiter
argument comes before thestring
argument.
Additional Tips from Fellow Developers
Contributed By: php
Here is my approach to have exploded output with multiple delimiter.
<?php
//$delimiters has to be array
//$string has to be array
function multiexplode ($delimiters,$string) {
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
$text = "here is a sample: this text, and this will be exploded. this also | this one too :)";
$exploded = multiexplode(array(",",".","|",":"),$text);
print_r($exploded);
//And output will be like this:
// Array
// (
// [0] => here is a sample
// [1] => this text
// [2] => and this will be exploded
// [3] => this also
// [4] => this one too
// [5] => )
// )
?>
Contributed By: tiago dot dias
Beaware splitting empty strings.
<?php
$str = "";
$res = explode(",", $str);
print_r($res);
?>
If you split an empty string, you get back a one-element array with 0 as the key and an empty string for the value.
Array
(
[0] =>
)
To solve this, just use array_filter() without callback. Quoting manual page "If the callback function is not supplied, array_filter() will remove all the entries of input that are equal to FALSE.".
<?php
$str = "";
$res = array_filter(explode(",", $str));
print_r($res);
?>
Array
(
)
Contributed By:
The comments to use array_filter() without a callback to remove empty strings from explode's results miss the fact that array_filter will remove all elements that, to quote the manual, "are equal to FALSE".
This includes, in particular, the string "0", which is NOT an empty string.
If you really want to filter out empty strings, use the defining feature of the empty string that it is the only string that has a length of 0. So:
<?php
array_filter(explode(':', "1:2::3:0:4"), 'strlen');
?>
Contributed By: eye_syah88
A simple one line method to explode & trim whitespaces from the exploded elements
array_map('trim',explode(",",$str));
example:
$str="one ,two , three , four ";
print_r(array_map('trim',explode(",",$str)));
Output:
Array ( [0] => one [1] => two [2] => three [3] => four )
Contributed By: m0gr14
Here's a function for "multi" exploding a string.
<?php
//the function
//Param 1 has to be an Array
//Param 2 has to be a String
function multiexplode ($delimiters,$string) {
$ary = explode($delimiters[0],$string);
array_shift($delimiters);
if($delimiters != NULL) {
foreach($ary as $key => $val) {
$ary[$key] = multiexplode($delimiters, $val);
}
}
return $ary;
}
// Example of use
$string = "1-2-3|4-5|6:7-8-9-0|1,2:3-4|5";
$delimiters = Array(",",":","|","-");
$res = multiexplode($delimiters,$string);
echo '<pre>';
print_r($res);
echo '</pre>';
//returns
/*
Array
(
[0] => Array
(
[0] => Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[1] => Array
(
[0] => 4
[1] => 5
)
[2] => Array
(
[0] => 6
)
)
[1] => Array
(
[0] => Array
(
[0] => 7
[1] => 8
[2] => 9
[3] => 0
)
[1] => Array
(
[0] => 1
)
)
)
[1] => Array
(
[0] => Array
(
[0] => Array
(
[0] => 2
)
)
[1] => Array
(
[0] => Array
(
[0] => 3
[1] => 4
)
[1] => Array
(
[0] => 5
)
)
)
)
*/
?>
Contributed By: Anonymous
<?php
// converts pure string into a trimmed keyed array
function string2KeyedArray($string, $delimiter = ',', $kv = '=>') {
if ($a = explode($delimiter, $string)) { // create parts
foreach ($a as $s) { // each part
if ($s) {
if ($pos = strpos($s, $kv)) { // key/value delimiter
$ka[trim(substr($s, 0, $pos))] = trim(substr($s, $pos + strlen($kv)));
} else { // key delimiter not found
$ka[] = trim($s);
}
}
}
return $ka;
}
} // string2KeyedArray
$string = 'a=>1, b=>23 , $a, c=> 45% , true,d => ab c ';
print_r(string2KeyedArray($string));
?>
Array
(
[a] => 1
[b] => 23
[0] => $a
[c] => 45%
[1] => true
[d] => ab c
)
Contributed By: kkobashi
Explode does not parse a string by delimiters, in the sense that we expect to find tokens between a starting and ending delimiter, but instead splits a string into parts by using a string as the boundary of each part. Once that boundary is discovered the string is split. Whether or not that boundary is proceeded or superseded by any data is irrelevant since the parts are determined at the point a boundary is discovered.
For example:
<?php
var_dump(explode("/","/"));
/*
Outputs
array(2) {
[0]=>
string(0) ""
[1]=>
string(0) ""
}
*/
?>
The reason we have two empty strings here is that a boundary is discovered before any data has been collected from the string. The boundary splits the string into two parts even though those parts are empty.
One way to avoid getting back empty parts (if you don't care for those empty parts) is to use array_filter on the result.
<?php
var_dump(array_filter(explode("/","/")));
/*
Outputs
array(0) {
}
*/
?>
*[This note was edited by googleguy at php dot net for clarity]*
PHP fprintf()
Function
What does fprintf()
do?
The PHP
function will write a string produced according to fprintf()
format
to the stream resource specified by handle
.
PHP fprintf()
Syntax
fprintf ( resource $handle , string $format [, mixed $... ] ) : int
PHP fprintf()
Parameters
handle
— A file system pointer resource that is typically created usingfopen()
.format
— The format string is composed of zero or more directives: ordinary characters (excluding %) that are copied directly to the result and conversion specifications, each of which results in fetching its own parameter....
—
PHP fprintf()
Return Value
The PHP fprintf()
function returns the length of the string written.
PHP fprintf()
Working Examples
1. fprintf(): zero-padded integers
<?php
if (!($fp = fopen('date.txt', 'w'))) {
return;
}
fprintf($fp, "%04d-%02d-%02d", $year, $month, $day);
// will write the formatted ISO date to date.txt
?>
2. fprintf(): formatting currency
<?php
if (!($fp = fopen('currency.txt', 'w'))) {
return;
}
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money will output "123.1";
$len = fprintf($fp, '%01.2f', $money);
// will write "123.10" to currency.txt
echo "wrote $len bytes to currency.txt";
// use the return value of fprintf to determine how many bytes we wrote
?>
Important Points about PHP fprintf()
Function
The c type specifier ignores padding and width
Attempting to use a combination of the string and width specifiers with character sets that require more than one byte per character may result in unexpected results
PHP get_html_translation_table()
Function
What does get_html_translation_table()
do?
The PHP
function will give you the translation table used by get_html_translation_table()
htmlspecialchars()
and htmlentities()
.
PHP get_html_translation_table()
Syntax
get_html_translation_table ([ int $table = HTML_SPECIALCHARS [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = "UTF-8" ]]] ) : array
PHP get_html_translation_table()
Parameters
table
— Which table to return. Either HTML_ENTITIES or HTML_SPECIALCHARS.flags
— A bitmask of one or more of the following flags, which specify which quotes the table will contain as well as which document type the table is for. The default is ENT_COMPAT | ENT_HTML401.encoding
— Encoding to use. If omitted, the default value for this argument is ISO-8859-1 in versions of PHP prior to 5.4.0, and UTF-8 from PHP 5.4.0 onwards.
PHP get_html_translation_table()
Return Value
The PHP get_html_translation_table()
function returns the translation table as an array, with the original characters as keys and entities as values.
PHP get_html_translation_table()
Working Examples
1. Translation Table Example
<?php
var_dump(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES | ENT_HTML5));
?>
Output of the above code:
array(1510) {
["
"]=>
string(9) "
"
["!"]=>
string(6) "!"
["""]=>
string(6) """
["#"]=>
string(5) "#"
["$"]=>
string(8) "$"
["%"]=>
string(8) "%"
["&"]=>
string(5) "&"
["'"]=>
string(6) "'"
// ...
}
Changelog for PHP get_html_translation_table() Function
5.4.0 — The default value for the encoding
parameter was changed to UTF-8.
5.4.0 — The constants ENT_HTML401
, ENT_XML1
, ENT_XHTML
and ENT_HTML5
were added.
5.3.4 — The encoding
parameter was added.
Important Points about PHP get_html_translation_table()
Function
Special characters can be encoded in several ways. E.g. “ can be encoded as ", " or ".
get_html_translation_table()
returns only the form used byhtmlspecialchars()
andhtmlentities()
.
Additional Tips from Fellow Developers
Contributed By: kevin
Be careful using get_html_translation_table() in a loop, as it's very slow.
Contributed By: michael dot genesis
The fact that MS-word and some other sources use CP-1252, and that it is so close to Latin1 ('ISO-8859-1') causes a lot of confusion. What confused me the most was finding that mySQL uses CP-1252 by default.
You may run into trouble if you find yourself tempted to do something like this:
<?php
$trans[chr(149)] = '•'; // Bullet
$trans[chr(150)] = '–'; // En Dash
$trans[chr(151)] = '—'; // Em Dash
$trans[chr(152)] = '˜'; // Small Tilde
$trans[chr(153)] = '™'; // Trade Mark Sign
?>
Don't do it. DON'T DO IT!
You can use:
<?php
$translationTable = get_html_translation_table(HTML_ENTITIES, ENT_NOQUOTES, 'WINDOWS-1252');
?>
or just convert directly:
<?php
$output = htmlentities($input, ENT_NOQUOTES, 'WINDOWS-1252');
?>
But your web page is probably encoded UTF-8, and you probably don't really want CP-1252 text flying around, so fix the character encoding first:
<?php
$output = mb_convert_encoding($input, 'UTF-8', 'WINDOWS-1252');
$ouput = htmlentities($output);
?>
PHP hebrev()
Function
What does hebrev()
do?
The PHP
function will convert logical Hebrew text to visual text.hebrev()
PHP hebrev()
Syntax
hebrev ( string $hebrew_text [, int $max_chars_per_line = 0 ] ) : string
PHP hebrev()
Parameters
hebrew_text
— A Hebrew input string.max_chars_per_line
— This optional parameter indicates maximum number of characters per line that will be returned.
PHP hebrev()
Return Value
The PHP hebrev()
function returns the visual string.
PHP hebrevc()
Function
What does hebrevc()
do?
The PHP
function will convert logical Hebrew text to visual text with newline conversion.hebrevc()
PHP hebrevc()
Syntax
hebrevc ( string $hebrew_text [, int $max_chars_per_line = 0 ] ) : string
PHP hebrevc()
Parameters
hebrew_text
— A Hebrew input string.max_chars_per_line
— This optional parameter indicates maximum number of characters per line that will be returned.
PHP hebrevc()
Return Value
The PHP hebrevc()
function returns the visual string.
PHP hex2bin()
Function
What does hex2bin()
do?
The PHP
function will decodes a hexadecimally encoded binary string.hex2bin()
PHP hex2bin()
Syntax
hex2bin ( string $data ) : string
PHP hex2bin()
Parameters
data
— Hexadecimal representation of data.
PHP hex2bin()
Return Value
The PHP hex2bin()
function returns the binary representation of the given data or FALSE
on failure.
PHP hex2bin()
Working Examples
1. hex2bin() example
<?php
$hex = hex2bin("6578616d706c65206865782064617461");
var_dump($hex);
?>
Output of the above code:
string(16) "example hex data"
Changelog for PHP hex2bin() Function
5.5.1 — A warning is thrown if the input string is invalid hexadecimal string.
5.4.4 — A warning is thrown if the input string is of odd length. In PHP 5.4.0 the string was silently accepted, but the last byte was truncated.
Important Points about PHP hex2bin()
Function
This function does NOT convert a hexadecimal number to a binary number. This can be done using the
base_convert()
function.
Additional Tips from Fellow Developers
Contributed By: Anonymous
The function hex2bin does not exist in PHP5.
You can use 'pack' instead :
$binary_string = pack("H*" , $hex_string);
PHP html_entity_decode()
Function
What does html_entity_decode()
do?
The PHP
function will convert HTML entities to their corresponding characters.html_entity_decode()
PHP html_entity_decode()
Syntax
html_entity_decode ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") ]] ) : string
PHP html_entity_decode()
Parameters
string
— The input string.flags
— A bitmask of one or more of the following flags, which specify how to handle quotes and which document type to use. The default is ENT_COMPAT | ENT_HTML401.encoding
— An optional argument defining the encoding used when converting characters.
PHP html_entity_decode()
Return Value
The PHP html_entity_decode()
function returns the decoded string.
PHP html_entity_decode()
Working Examples
1. Decoding HTML entities
<?php
$orig = "I'll \"walk\" the <b>dog</b> now";
$a = htmlentities($orig);
$b = html_entity_decode($a);
echo $a; // I'll "walk" the <b>dog</b> now
echo $b; // I'll "walk" the <b>dog</b> now
?>
Changelog for PHP html_entity_decode() Function
5.6.0 — The default value for the encoding
parameter was changed to be the value of the default_charset configuration option.
5.4.0 — Default encoding changed from ISO-8859-1 to UTF-8.
5.4.0 — The constants ENT_HTML401
, ENT_XML1
, ENT_XHTML
and ENT_HTML5
were added.
Important Points about PHP html_entity_decode()
Function
You might wonder why trim(html_entity_decode(‘ ’)); doesn’t reduce the string to an empty string, that’s because the ‘ ’ entity is not ASCII code 32 (which is stripped by
trim()
) but ASCII code 160 (0xa0) in the default ISO 8859-1 encoding.
Additional Tips from Fellow Developers
Contributed By: Martin
If you need something that converts &#[0-9]+ entities to UTF-8, this is simple and works:
<?php
/* Entity crap. /
$input = "Fovič";
$output = preg_replace_callback("/(&#[0-9]+;)/", function($m) { return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); }, $input);
/* Plain UTF-8. */
echo $output;
?>
Contributed By: txnull
Use the following to decode all entities:
<?php html_entity_decode($string, ENT_QUOTES | ENT_XML1, 'UTF-8') ?>
I've checked these special entities:
- double quotes (")
- single quotes (' and ')
- non printable chars (e.g. )
With other $flags some or all won't be decoded.
It seems that ENT_XML1 and ENT_XHTML are identical when decoding.
PHP htmlentities()
Function
What does htmlentities()
do?
The PHP
function will convert all applicable characters to HTML entities.htmlentities()
PHP htmlentities()
Syntax
htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = TRUE ]]] ) : string
PHP htmlentities()
Parameters
string
— The input string.flags
— A bitmask of one or more of the following flags, which specify how to handle quotes, invalid code unit sequences and the used document type. The default is ENT_COMPAT | ENT_HTML401.encoding
— An optional argument defining the encoding used when converting characters.double_encode
— When double_encode is turned off PHP will not encode existing html entities. The default is to convert everything.
PHP htmlentities()
Return Value
The PHP htmlentities()
function returns the encoded string.
PHP htmlentities()
Working Examples
1. A htmlentities() example
<?php
$str = "A 'quote' is <b>bold</b>";
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str);
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
?>
2. Usage of ENT_IGNORE
<?php
$str = "\x8F!!!";
// Outputs an empty string
echo htmlentities($str, ENT_QUOTES, "UTF-8");
// Outputs "!!!"
echo htmlentities($str, ENT_QUOTES | ENT_IGNORE, "UTF-8");
?>
Changelog for PHP htmlentities() Function
5.6.0 — The default value for the encoding
parameter was changed to be the value of the default_charset configuration option.
5.4.0 — The default value for the encoding
parameter was changed to UTF-8.
5.4.0 — The constants ENT_SUBSTITUTE
, ENT_DISALLOWED
, ENT_HTML401
, ENT_XML1
, ENT_XHTML
and ENT_HTML5
were added.
5.3.0 — The constant ENT_IGNORE
was added.
5.2.3 — The double_encode
parameter was added.
Additional Tips from Fellow Developers
Contributed By: Sijmen Ruwhof
An important note below about using this function to secure your application against Cross Site Scripting (XSS) vulnerabilities.
When printing user input in an attribute of an HTML tag, the default configuration of htmlEntities() doesn't protect you against XSS, when using single quotes to define the border of the tag's attribute-value. XSS is then possible by injecting a single quote:
<?php
$_GET['a'] = "#000' onload='alert(document.cookie)";
?>
XSS possible (insecure):
<?php
$href = htmlEntities($_GET['a']);
print "<body bgcolor='$href'>"; # results in: <body bgcolor='#000' onload='alert(document.cookie)'>
?>
Use the 'ENT_QUOTES' quote style option, to ensure no XSS is possible and your application is secure:
<?php
$href = htmlEntities($_GET['a'], ENT_QUOTES);
print "<body bgcolor='$href'>"; # results in: <body bgcolor='#000' onload='alert(document.cookie)'>
?>
The 'ENT_QUOTES' option doesn't protect you against javascript evaluation in certain tag's attributes, like the 'href' attribute of the 'a' tag. When clicked on the link below, the given JavaScript will get executed:
<?php
$_GET['a'] = 'javascript:alert(document.cookie)';
$href = htmlEntities($_GET['a'], ENT_QUOTES);
print "<a href='$href'>link</a>"; # results in: <a href='javascript:alert(document.cookie)'>link</a>
?>
Contributed By:
I've seen lots of functions to convert all the entities, but I needed to do a fulltext search in a db field that had named entities instead of numeric entities (edited by tinymce), so I searched the tinymce source and found a string with the value->entity mapping. So, i wrote the following function to encode the user's query with named entities.
The string I used is different of the original, because i didn't want to convert ' or ". The string is too long, so I had to cut it. To get the original check TinyMCE source and search for nbsp or other entity ;)
<?php
$entities_unmatched = explode(',', '160,nbsp,161,iexcl,162,cent, [...] ');
$even = 1;
foreach($entities_unmatched as $c) {
if($even) {
$ord = $c;
} else {
$entities_table[$ord] = $c;
}
$even = 1 - $even;
}
function encode_named_entities($str) {
global $entities_table;
$encoded_str = '';
for($i = 0; $i < strlen($str); $i++) {
$ent = @$entities_table[ord($str{$i})];
if($ent) {
$encoded_str .= "&$ent;";
} else {
$encoded_str .= $str{$i};
}
}
return $encoded_str;
}
?>
Contributed By: n
Html entities does not encode all unicode characters. It encodes what it can [all of latin1], and the others slip through. Љ is the nasty I use. I have searched for a function which encodes everything, but in the end I wrote this. This is as simple as I can get it. Consult an ansii table to custom include/omit chars you want/don't. I'm sure it's not that fast.
// Unicode-proof htmlentities.
// Returns 'normal' chars as chars and weirdos as numeric html entites.
function superentities( $str ){
// get rid of existing entities else double-escape
$str = html_entity_decode(stripslashes($str),ENT_QUOTES,'UTF-8');
$ar = preg_split('/(?<!^)(?!$)/u', $str ); // return array of every multi-byte character
foreach ($ar as $c){
$o = ord($c);
if ( (strlen($c) > 1) || /* multi-byte [unicode] */
($o <32 || $o > 126) || /* <- control / latin weirdos -> */
($o >33 && $o < 40) ||/* quotes + ambersand */
($o >59 && $o < 63) /* html */
) {
// convert to numeric entity
$c = mb_encode_numericentity($c,array (0x0, 0xffff, 0, 0xffff), 'UTF-8');
}
$str2 .= $c;
}
return $str2;
}
Contributed By: phil
The following will make a string completely safe for XML:
<?php
function philsXMLClean($strin) {
$strout = null;
for ($i = 0; $i < strlen($strin); $i++) {
$ord = ord($strin[$i]);
if (($ord > 0 && $ord < 32) || ($ord >= 127)) {
$strout .= "&#{$ord};";
}
else {
switch ($strin[$i]) {
case '<':
$strout .= '<';
break;
case '>':
$strout .= '>';
break;
case '&':
$strout .= '&';
break;
case '"':
$strout .= '"';
break;
default:
$strout .= $strin[$i];
}
}
}
return $strout;
}
?>
PHP htmlspecialchars()
Function
What does htmlspecialchars()
do?
The PHP
function will convert special characters to HTML entities.htmlspecialchars()
PHP htmlspecialchars()
Syntax
htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = TRUE ]]] ) : string
PHP htmlspecialchars()
Parameters
string
— The string being converted.flags
— A bitmask of one or more of the following flags, which specify how to handle quotes, invalid code unit sequences and the used document type. The default is ENT_COMPAT | ENT_HTML401.encoding
— An optional argument defining the encoding used when converting characters.double_encode
— When double_encode is turned off PHP will not encode existing html entities, the default is to convert everything.
PHP htmlspecialchars()
Return Value
The PHP htmlspecialchars()
function returns the converted string.
PHP htmlspecialchars()
Working Examples
1. htmlspecialchars() example
<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // <a href='test'>Test</a>
?>
Changelog for PHP htmlspecialchars() Function
5.6.0 — The default value for the encoding
parameter was changed to be the value of the default_charset configuration option.
5.4.0 — The default value for the encoding
parameter was changed to UTF-8.
5.4.0 — The constants ENT_SUBSTITUTE
, ENT_DISALLOWED
, ENT_HTML401
, ENT_XML1
, ENT_XHTML
and ENT_HTML5
were added.
5.3.0 — The constant ENT_IGNORE
was added.
5.2.3 — The double_encode
parameter was added.
Important Points about PHP htmlspecialchars()
Function
Note that this function does not translate anything beyond what is listed above. For full entity translation, see
htmlentities()
.In case of an ambiguous
flags
value, the following rules apply:
Additional Tips from Fellow Developers
Contributed By: Dave
As of PHP 5.4 they changed default encoding from "ISO-8859-1" to "UTF-8". So if you get null from htmlspecialchars or htmlentities
where you have only set
<?php
echo htmlspecialchars($string);
echo htmlentities($string);
?>
you can fix it by
<?php
echo htmlspecialchars($string, ENT_COMPAT,'ISO-8859-1', true);
echo htmlentities($string, ENT_COMPAT,'ISO-8859-1', true);
?>
On linux you can find the scripts you need to fix by
grep -Rl "htmlspecialchars\\|htmlentities" /path/to/php/scripts/
Contributed By: Mike Robinson
Unfortunately, as far as I can tell, the PHP devs did not provide ANY way to set the default encoding used by htmlspecialchars() or htmlentities(), even though they changed the default encoding in PHP 5.4 (*golf clap for PHP devs*). To save someone the time of trying it, this does not work:
<?php
ini_set('default_charset', $charset); // doesn't work.
?>
Unfortunately, the only way to not have to explicitly provide the second and third parameter every single time this function is called (which gets extremely tedious) is to write your own function as a wrapper:
<?php
define('CHARSET', 'ISO-8859-1');
define('REPLACE_FLAGS', ENT_COMPAT | ENT_XHTML);
function html($string) {
return htmlspecialchars($string, REPLACE_FLAGS, CHARSET);
}
echo html("ñ"); // works
?>
You can do the same for htmlentities()
Contributed By: Thomasvdbulk
I searched for a while for a script, that could see the difference between an html tag and just < and > placed in the text,
the reason is that i recieve text from a database,
wich is inserted by an html form, and contains text and html tags,
the text can contain < and >, so does the tags,
with htmlspecialchars you can validate your text to XHTML,
but you'll also change the tags, like <b> to <b>,
so i needed a script that could see the difference between those two...
but i couldn't find one so i made my own one,
i havent fully tested it, but the parts i tested worked perfect!
just for people that were searching for something like this,
it may looks big, could be done easier, but it works for me, so im happy.
<?php
function fixtags($text){
$text = htmlspecialchars($text);
$text = preg_replace("/=/", "=\"\"", $text);
$text = preg_replace("/"/", ""\"", $text);
$tags = "/<(\/|)(\w*)(\ |)(\w*)([\\\=]*)(?|(\")\""\"|)(?|(.*)?"(\")|)([\ ]?)(\/|)>/i";
$replacement = "<$1$2$3$4$5$6$7$8$9$10>";
$text = preg_replace($tags, $replacement, $text);
$text = preg_replace("/=\"\"/", "=", $text);
return $text;
}
?>
an example:
<?php
$string = "
this is smaller < than this<br />
this is greater > than this<br />
this is the same = as this<br />
<a href=\"http://www.example.com/example.php?test=test\">This is a link</a><br />
<b>Bold</b> <i>italic</i> etc...";
echo fixtags($string);
?>
will echo:
this is smaller < than this<br />
this is greater > than this<br />
this is the same = as this<br />
<a href="http://www.example.com/example.php?test=test">This is a link</a><br />
<b>Bold</b> <i>italic</i> etc...
I hope its helpfull!!
PHP htmlspecialchars_decode()
Function
What does htmlspecialchars_decode()
do?
The PHP
function will convert special HTML entities back to characters .htmlspecialchars_decode()
PHP htmlspecialchars_decode()
Syntax
htmlspecialchars_decode ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 ] ) : string
PHP htmlspecialchars_decode()
Parameters
string
— The string to decode.flags
— A bitmask of one or more of the following flags, which specify how to handle quotes and which document type to use. The default is ENT_COMPAT | ENT_HTML401.
PHP htmlspecialchars_decode()
Return Value
The PHP htmlspecialchars_decode()
function returns the decoded string.
PHP htmlspecialchars_decode()
Working Examples
1. A htmlspecialchars_decode() example
<?php
$str = "<p>this -> "</p>\n";
echo htmlspecialchars_decode($str);
// note that here the quotes aren't converted
echo htmlspecialchars_decode($str, ENT_NOQUOTES);
?>
Output of the above code:
<p>this -> "</p>
<p>this -> "</p>
Changelog for PHP htmlspecialchars_decode() Function
5.4.0 — The constants ENT_HTML401
, ENT_XML1
, ENT_XHTML
and ENT_HTML5
were added.
PHP implode()
Function
What does implode()
do?
The PHP
function will join array elements with a implode()
glue
string.
PHP implode()
Syntax
implode ( string $glue , array $pieces ) : string
implode ( array $pieces ) : string
PHP implode()
Parameters
glue
— Defaults to an empty string.pieces
— The array of strings to implode.
PHP implode()
Return Value
The PHP implode()
function returns a string containing a string representation of all the array elements in the same order, with the glue string between each element.
PHP implode()
Working Examples
1. implode() example
<?php
$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);
echo $comma_separated; // lastname,email,phone
// Empty string when using an empty array:
var_dump(implode('hello', array())); // string(0) ""
?>
Important Points about PHP implode()
Function
implode()
can, for historical reasons, accept its parameters in either order. For consistency withexplode()
, however, it may be less confusing to use the documented order of arguments.
Additional Tips from Fellow Developers
Contributed By: houston_roadrunner
It should be noted that an array with one or no elements works fine. for example:
<?php
$a1 = array("1","2","3");
$a2 = array("a");
$a3 = array();
echo "a1 is: '".implode("','",$a1)."'<br>";
echo "a2 is: '".implode("','",$a2)."'<br>";
echo "a3 is: '".implode("','",$a3)."'<br>";
?>
will produce:
===========
a1 is: '1','2','3'
a2 is: 'a'
a3 is: ''
Contributed By: omar dot ajoue
Can also be used for building tags or complex lists, like the following:
<?php
$elements = array('a', 'b', 'c');
echo "<ul><li>" . implode("</li><li>", $elements) . "</li></ul>";
?>
This is just an example, you can create a lot more just finding the right glue! ;)
Contributed By: ASchmidt
It's not obvious from the samples, if/how associative arrays are handled. The "implode" function acts on the array "values", disregarding any keys:
<?php
declare(strict_types=1);
$a = array( 'one','two','three' );
$b = array( '1st' => 'four', 'five', '3rd' => 'six' );
echo implode( ',', $a ),'/', implode( ',', $b );
?>
outputs:
one,two,three/four,five,six
Contributed By: Felix Rauch
It might be worthwhile noting that the array supplied to implode() can contain objects, provided the objects implement the __toString() method.
Example:
<?php
class Foo
{
protected $title;
public function __construct($title)
{
$this->title = $title;
}
public function __toString()
{
return $this->title;
}
}
$array = [
new Foo('foo'),
new Foo('bar'),
new Foo('qux')
];
echo implode('; ', $array);
?>
will output:
foo; bar; qux
Contributed By: php.net
Also quite handy in INSERT statements:
<?php
// array containing data
$array = array(
"name" => "John",
"surname" => "Doe",
"email" => "j.doe@intelligence.gov"
);
// build query...
$sql = "INSERT INTO table";
// implode keys of $array...
$sql .= " (`".implode("`, `", array_keys($array))."`)";
// implode values of $array...
$sql .= " VALUES ('".implode("', '", $array)."') ";
// execute query...
$result = mysql_query($sql) or die(mysql_error());
?>
Contributed By: alexey dot klimko
If you want to implode an array of booleans, you will get a strange result:
<?php
var_dump(implode('',array(true, true, false, false, true)));
?>
Output:
string(3) "111"
TRUE became "1", FALSE became nothing.
Contributed By: Anonymous
It may be worth noting that if you accidentally call implode on a string rather than an array, you do NOT get your string back, you get NULL:
<?php
var_dump(implode(':', 'xxxxx'));
?>
returns
NULL
This threw me for a little while.
Contributed By: masterandujar
Even handier if you use the following:
<?php
$id_nums = array(1,6,12,18,24);
$id_nums = implode(", ", $id_nums);
$sqlquery = "Select name,email,phone from usertable where user_id IN ($id_nums)";
// $sqlquery becomes "Select name,email,phone from usertable where user_id IN (1,6,12,18,24)"
?>
Be sure to escape/sanitize/use prepared statements if you get the ids from users.
PHP join()
Function
What does join()
do?
The PHP
function will this function is an alias of: join()
implode()
.
PHP join()
Syntax
PHP join()
Parameters
This function does not accept any parameters.
PHP lcfirst()
Function
What does lcfirst()
do?
The PHP
function will make a string’s first character lowercase.lcfirst()
PHP lcfirst()
Syntax
lcfirst ( string $str ) : string
PHP lcfirst()
Parameters
str
— The input string.
PHP lcfirst()
Return Value
The PHP lcfirst()
function returns the resulting string.
PHP lcfirst()
Working Examples
1. lcfirst() example
<?php
$foo = 'HelloWorld';
$foo = lcfirst($foo); // helloWorld
$bar = 'HELLO WORLD!';
$bar = lcfirst($bar); // hELLO WORLD!
$bar = lcfirst(strtoupper($bar)); // hELLO WORLD!
?>
Additional Tips from Fellow Developers
Contributed By: phpnet
Easiest work-around I've found for <5.3:
<?php
$string = "CamelCase"
$string{0} = strtolower($string{0})
echo $string; // outputs camelCase
?>
PHP levenshtein()
Function
What does levenshtein()
do?
The PHP
function will calculate Levenshtein distance between two strings.levenshtein()
PHP levenshtein()
Syntax
levenshtein ( string $str1 , string $str2 ) : int
levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del ) : int
PHP levenshtein()
Parameters
str1
— One of the strings being evaluated for Levenshtein distance.str2
— One of the strings being evaluated for Levenshtein distance.cost_ins
— Defines the cost of insertion.cost_rep
— Defines the cost of replacement.cost_del
— Defines the cost of deletion.
PHP levenshtein()
Return Value
The PHP levenshtein()
function returns the Levenshtein-Distance between the two argument strings or -1, if one of the argument strings is longer than the limit of 255 characters.
PHP levenshtein()
Working Examples
1. levenshtein() example
<?php
// input misspelled word
$input = 'carrrot';
// array of words to check against
$words = array('apple','pineapple','banana','orange',
'radish','carrot','pea','bean','potato');
// no shortest distance found, yet
$shortest = -1;
// loop through words to find the closest
foreach ($words as $word) {
// calculate the distance between the input word,
// and the current word
$lev = levenshtein($input, $word);
// check for an exact match
if ($lev == 0) {
// closest word is this one (exact match)
$closest = $word;
$shortest = 0;
// break out of the loop; we've found an exact match
break;
}
// if this distance is less than the next found shortest
// distance, OR if a next shortest word has not yet been found
if ($lev <= $shortest || $shortest < 0) {
// set the closest match, and shortest distance
$closest = $word;
$shortest = $lev;
}
}
echo "Input word: $input\n";
if ($shortest == 0) {
echo "Exact match found: $closest\n";
} else {
echo "Did you mean: $closest?\n";
}
?>
Output of the above code:
Input word: carrrot
Did you mean: carrot?
Additional Tips from Fellow Developers
Contributed By: luciole75w
The levenshtein function processes each byte of the input string individually. Then for multibyte encodings, such as UTF-8, it may give misleading results.
Example with a french accented word :
- levenshtein('notre', 'votre') = 1
- levenshtein('notre', 'nôtre') = 2 (huh ?!)
You can easily find a multibyte compliant PHP implementation of the levenshtein function but it will be of course much slower than the C implementation.
Another option is to convert the strings to a single-byte (lossless) encoding so that they can feed the fast core levenshtein function.
Here is the conversion function I used with a search engine storing UTF-8 strings, and a quick benchmark. I hope it will help.
<?php
// Convert an UTF-8 encoded string to a single-byte string suitable for
// functions such as levenshtein.
//
// The function simply uses (and updates) a tailored dynamic encoding
// (in/out map parameter) where non-ascii characters are remapped to
// the range [128-255] in order of appearance.
//
// Thus it supports up to 128 different multibyte code points max over
// the whole set of strings sharing this encoding.
//
function utf8_to_extended_ascii($str, &$map)
{
// find all multibyte characters (cf. utf-8 encoding specs)
$matches = array();
if (!preg_match_all('/[\xC0-\xF7][\x80-\xBF]+/', $str, $matches))
return $str; // plain ascii string
// update the encoding map with the characters not already met
foreach ($matches[0] as $mbc)
if (!isset($map[$mbc]))
$map[$mbc] = chr(128 + count($map));
// finally remap non-ascii characters
return strtr($str, $map);
}
// Didactic example showing the usage of the previous conversion function but,
// for better performance, in a real application with a single input string
// matched against many strings from a database, you will probably want to
// pre-encode the input only once.
//
function levenshtein_utf8($s1, $s2)
{
$charMap = array();
$s1 = utf8_to_extended_ascii($s1, $charMap);
$s2 = utf8_to_extended_ascii($s2, $charMap);
return levenshtein($s1, $s2);
}
?>
Results (for about 6000 calls)
- reference time core C function (single-byte) : 30 ms
- utf8 to ext-ascii conversion + core function : 90 ms
- full php implementation : 3000 ms
Contributed By: paulrowe
[EDITOR'S NOTE: original post and 2 corrections combined into 1 -- mgf]
Here is an implementation of the Levenshtein Distance calculation that only uses a one-dimensional array and doesn't have a limit to the string length. This implementation was inspired by maze generation algorithms that also use only one-dimensional arrays.
I have tested this function with two 532-character strings and it completed in 0.6-0.8 seconds.
<?php
/*
* This function starts out with several checks in an attempt to save time.
* 1. The shorter string is always used as the "right-hand" string (as the size of the array is based on its length).
* 2. If the left string is empty, the length of the right is returned.
* 3. If the right string is empty, the length of the left is returned.
* 4. If the strings are equal, a zero-distance is returned.
* 5. If the left string is contained within the right string, the difference in length is returned.
* 6. If the right string is contained within the left string, the difference in length is returned.
* If none of the above conditions were met, the Levenshtein algorithm is used.
*/
function LevenshteinDistance($s1, $s2)
{
$sLeft = (strlen($s1) > strlen($s2)) ? $s1 : $s2;
$sRight = (strlen($s1) > strlen($s2)) ? $s2 : $s1;
$nLeftLength = strlen($sLeft);
$nRightLength = strlen($sRight);
if ($nLeftLength == 0)
return $nRightLength;
else if ($nRightLength == 0)
return $nLeftLength;
else if ($sLeft === $sRight)
return 0;
else if (($nLeftLength < $nRightLength) && (strpos($sRight, $sLeft) !== FALSE))
return $nRightLength - $nLeftLength;
else if (($nRightLength < $nLeftLength) && (strpos($sLeft, $sRight) !== FALSE))
return $nLeftLength - $nRightLength;
else {
$nsDistance = range(1, $nRightLength + 1);
for ($nLeftPos = 1; $nLeftPos <= $nLeftLength; ++$nLeftPos)
{
$cLeft = $sLeft[$nLeftPos - 1];
$nDiagonal = $nLeftPos - 1;
$nsDistance[0] = $nLeftPos;
for ($nRightPos = 1; $nRightPos <= $nRightLength; ++$nRightPos)
{
$cRight = $sRight[$nRightPos - 1];
$nCost = ($cRight == $cLeft) ? 0 : 1;
$nNewDiagonal = $nsDistance[$nRightPos];
$nsDistance[$nRightPos] =
min($nsDistance[$nRightPos] + 1,
$nsDistance[$nRightPos - 1] + 1,
$nDiagonal + $nCost);
$nDiagonal = $nNewDiagonal;
}
}
return $nsDistance[$nRightLength];
}
}
?>
PHP localeconv()
Function
What does localeconv()
do?
The PHP
function will give you an associative array containing localized numeric and monetary formatting information.localeconv()
PHP localeconv()
Syntax
localeconv ( void ) : array
PHP localeconv()
Parameters
This function does not accept any parameters.
PHP localeconv()
Return Value
The PHP localeconv()
function returns data based upon the current locale as set by setlocale()
. The associative array that is returned contains the following fields:
PHP localeconv()
Working Examples
1. localeconv() example
<?php
if (false !== setlocale(LC_ALL, 'nl_NL.UTF-8@euro')) {
$locale_info = localeconv();
print_r($locale_info);
}
?>
Output of the above code:
Array
(
[decimal_point] => .
[thousands_sep] =>
[int_curr_symbol] => EUR
[currency_symbol] => €
[mon_decimal_point] => ,
[mon_thousands_sep] =>
[positive_sign] =>
[negative_sign] => -
[int_frac_digits] => 2
[frac_digits] => 2
[p_cs_precedes] => 1
[p_sep_by_space] => 1
[n_cs_precedes] => 1
[n_sep_by_space] => 1
[p_sign_posn] => 1
[n_sign_posn] => 2
[grouping] => Array
(
)
[mon_grouping] => Array
(
[0] => 3
[1] => 3
)
)
PHP ltrim()
Function
What does ltrim()
do?
The PHP
function will strip whitespace (or other characters) from the beginning of a string.ltrim()
PHP ltrim()
Syntax
ltrim ( string $str [, string $character_mask ] ) : string
PHP ltrim()
Parameters
str
— The input string.character_mask
— You can also specify the characters you want to strip, by means of the character_mask parameter. Simply list all characters that you want to be stripped. With .. you can specify a range of characters.
PHP ltrim()
Return Value
The PHP ltrim()
function returns a string with whitespace stripped from the beginning of str
. Without the second parameter, ltrim()
will strip these characters:
PHP ltrim()
Working Examples
1. Usage example of ltrim()
<?php
$text = "\t\tThese are a few words :) ... ";
$binary = "\x09Example string\x0A";
$hello = "Hello World";
var_dump($text, $binary, $hello);
print "\n";
$trimmed = ltrim($text);
var_dump($trimmed);
$trimmed = ltrim($text, " \t.");
var_dump($trimmed);
$trimmed = ltrim($hello, "Hdle");
var_dump($trimmed);
// trim the ASCII control characters at the beginning of $binary
// (from 0 to 31 inclusive)
$clean = ltrim($binary, "\x00..\x1F");
var_dump($clean);
?>
Output of the above code:
string(32) " These are a few words :) ... "
string(16) " Example string
"
string(11) "Hello World"
string(30) "These are a few words :) ... "
string(30) "These are a few words :) ... "
string(7) "o World"
string(15) "Example string
"
Additional Tips from Fellow Developers
Contributed By: tavi undersc 10 from yahoocom
When using a $character_mask the trimming stops at the first character that is not on that mask.
So in the $string = "Hello world" example with $character_mask = "Hdle", ltrim($hello, $character_mask) goes like this:
1. Check H from "Hello world" => it is in the $character_mask, so remove it
2. Check e from "ello world" => it is in the $character_mask, so remove it
3. Check l from "llo world" => it is in the $character_mask, so remove it
4. Check l from "lo world" => it is in the $character_mask, so remove it
5. Check o from "o world" => it is NOT in the $character_mask, exit the function
Remaining string is "o world".
I hope it helps someone as I had a confusing moment with this function.
PHP md5()
Function
What does md5()
do?
The PHP
function will give you that hash.md5()
PHP md5()
Syntax
md5 ( string $str [, bool $raw_output = FALSE ] ) : string
PHP md5()
Parameters
str
— The string.raw_output
— If the optional raw_output is set to TRUE, then the md5 digest is instead returned in raw binary format with a length of 16.
PHP md5()
Return Value
The PHP md5()
function returns the hash as a 32-character hexadecimal number.
PHP md5()
Working Examples
1. A md5() example
<?php
$str = 'apple';
if (md5($str) === '1f3870be274f6c49b3e31a0c6728957f') {
echo "Would you like a green or red apple?";
}
?>
Important Points about PHP md5()
Function
It is not recommended to use this function to secure passwords, due to the fast nature of this hashing algorithm. See the Password Hashing FAQ for details and best practices.
Additional Tips from Fellow Developers
Contributed By: Ray.Paseur sometimes uses Gmail
Md5('240610708') == md5('QNKCDZO')
This comparison is true because both md5() hashes start '0e' so PHP type juggling understands these strings to be scientific notation. By definition, zero raised to any power is zero.
PHP md5_file()
Function
What does md5_file()
do?
The PHP
function will give you that hash. The hash is a 32-character hexadecimal number.md5_file()
PHP md5_file()
Syntax
md5_file ( string $filename [, bool $raw_output = FALSE ] ) : string
PHP md5_file()
Parameters
filename
— The filenameraw_output
— When TRUE, returns the digest in raw binary format with a length of 16.
PHP md5_file()
Return Value
The PHP md5_file()
function returns a string on success, FALSE
otherwise.
PHP md5_file()
Working Examples
1. Usage example of md5_file()
<?php
$file = 'php-5.3.0alpha2-Win32-VC9-x64.zip';
echo 'MD5 file hash of ' . $file . ': ' . md5_file($file);
?>
Changelog for PHP md5_file() Function
5.1.0 — Changed the function to use the streams API. It means that you can use it with wrappers, like md5_file(‘http://example.com/..’)
Additional Tips from Fellow Developers
Contributed By: Chris
If you just need to find out if two files are identical, comparing file hashes can be inefficient, especially on large files. There's no reason to read two whole files and do all the math if the second byte of each file is different. If you don't need to store the hash value for later use, there may not be a need to calculate the hash value just to compare files. This can be much faster:
<?php
define('READ_LEN', 4096);
if(files_identical('file1.txt', 'file2.txt'))
echo 'files identical';
else
echo 'files not identical';
// pass two file names
// returns TRUE if files are the same, FALSE otherwise
function files_identical($fn1, $fn2) {
if(filetype($fn1) !== filetype($fn2))
return FALSE;
if(filesize($fn1) !== filesize($fn2))
return FALSE;
if(!$fp1 = fopen($fn1, 'rb'))
return FALSE;
if(!$fp2 = fopen($fn2, 'rb')) {
fclose($fp1);
return FALSE;
}
$same = TRUE;
while (!feof($fp1) and !feof($fp2))
if(fread($fp1, READ_LEN) !== fread($fp2, READ_LEN)) {
$same = FALSE;
break;
}
if(feof($fp1) !== feof($fp2))
$same = FALSE;
fclose($fp1);
fclose($fp2);
return $same;
}
?>
Contributed By: lukasamd
It's faster to use md5sum than openssl md5:
<?php
$begin = microtime(true);
$file_path = '../backup_file1.tar.gz';
$result = explode(" ", exec("md5sum $file_path"));
echo "Hash = ".$result[0]."<br />";
# Here 7 other big files (20-300 MB)
$end = microtime(true) - $begin;
echo "Time = $end";
# Time = 4.4475841522217
#Method with openssl
# Time = 12.1463856900543
?>
About 3x faster
PHP metaphone()
Function
What does metaphone()
do?
The PHP
function will calculates the metaphone key of metaphone()
str
.
PHP metaphone()
Syntax
metaphone ( string $str [, int $phonemes = 0 ] ) : string
PHP metaphone()
Parameters
str
— The input string.phonemes
— This parameter restricts the returned metaphone key to phonemes characters in length. The default value of 0 means no restriction.
PHP metaphone()
Return Value
The PHP metaphone()
function returns the metaphone key as a string, or FALSE
on failure.
PHP metaphone()
Working Examples
1. metaphone() basic example
<?php
var_dump(metaphone('programming'));
var_dump(metaphone('programmer'));
?>
Output of the above code:
string(7) "PRKRMNK"
string(6) "PRKRMR"
2. Using the phonemes parameter
<?php
var_dump(metaphone('programming', 5));
var_dump(metaphone('programmer', 5));
?>
Output of the above code:
string(5) "PRKRM"
string(5) "PRKRM"
Additional Tips from Fellow Developers
Contributed By: mail
You can use the metaphone function quite effectively with phrases by taking the levenshtein distances between two metaphone codes, and then taking this as a percentage of the length of the original metaphone code. thus you can define a percentage error, (say 20%) and accept only matches that are closer than that. i've found this works quite effectively in a function i am using on my website where an album name that the user entered is verified against existing album names that may be similar. this is also an excellent way of people being able to vaguely remember a phrase and get several suggestions out of the database. so you could type "i stiched nine times" with an error percentage of, say, 50 and still get 'a stitch in time saves nine' back as a match.
Contributed By: php
A double metaphone pecl module is available: http://pecl.php.net/package/doublemetaphone
Contributed By: Vipindas K.S
Metaphone
=======================
The metaphone() function can be used for spelling applications.This function returns the metaphone key of the string on success, or FALSE on failure.Its main use is when you are searching a genealogy database. check to see if a metaphone search is offered. It is also useful in making/searching family tree.
Given below is a simple code that calculates and compares two strings to find whether its metaphone codes are equivalent.
html code
==========
<html>
<body>
<form action="test.php" name="test" method="get">
Name1:<input type="text" name="name1" /><br />
Name2:<input type="text" name="name2" /><br />
<input type="submit" name="submit" value="compare" />
</form>
<!--php code begins here -->
<?php
if(isset($_GET['submit']))
{
$str1 = $_GET['name1'];
$str2 = $_GET['name2'];
$meta_one=metaphone($str1);
$meta_two=metaphone($str2);
echo "metaphone code for ".$str1." is ". $meta_one;
echo "<br />";
echo "metaphone code for ".$str2." is ". $meta_two."<br>";
if($meta_one==$meta_two)
{
echo "metaphone codes are matching";
}
else
{
echo "metaphone codes are not matching";
}
}
?>
</body>
</html>
Metaphone algorithm was developed by Lawrence Philips.
Lawrence Philips' RULES follow:
The 16 consonant sounds:
|--- ZERO represents "th"
|
B X S K J T F H L M N P R 0 W Y
Exceptions:
Beginning of word: "ae-", "gn", "kn-", "pn-", "wr-" ----> drop first letter
"Aebersold", "Gnagy", "Knuth", "Pniewski", "Wright"
Beginning of word: "x" ----> change to "s"
as in "Deng Xiaopeng"
Beginning of word: "wh-" ----> change to "w"
as in "Whalen"
Transformations:
B ----> B unless at the end of word after "m", as in "dumb", "McComb"
C ----> X (sh) if "-cia-" or "-ch-"
S if "-ci-", "-ce-", or "-cy-"
SILENT if "-sci-", "-sce-", or "-scy-"
K otherwise, including in "-sch-"
D ----> J if in "-dge-", "-dgy-", or "-dgi-"
T otherwise
F ----> F
G ----> SILENT if in "-gh-" and not at end or before a vowel
in "-gn" or "-gned"
in "-dge-" etc., as in above rule
J if before "i", or "e", or "y" if not double "gg"
K otherwise
H ----> SILENT if after vowel and no vowel follows
or after "-ch-", "-sh-", "-ph-", "-th-", "-gh-"
H otherwise
J ----> J
K ----> SILENT if after "c"
K otherwise
L ----> L
M ----> M
N ----> N
P ----> F if before "h"
P otherwise
Q ----> K
R ----> R
S ----> X (sh) if before "h" or in "-sio-" or "-sia-"
S otherwise
T ----> X (sh) if "-tia-" or "-tio-"
0 (th) if before "h"
silent if in "-tch-"
T otherwise
V ----> F
W ----> SILENT if not followed by a vowel
W if followed by a vowel
X ----> KS
Y ----> SILENT if not followed by a vowel
Y if followed by a vowel
Z ----> S
PHP money_format()
Function
What does money_format()
do?
The PHP
function will give you a formatted version of money_format()
number
. This function wraps the C library function strfmon()
, with the difference that this implementation converts only one number at a time.
PHP money_format()
Syntax
money_format ( string $format , float $number ) : string
PHP money_format()
Parameters
format
— The format specification consists of the following sequence:=f
— The character = followed by a (single byte) character f to be used as the numeric fill character. The default fill character is space.^
— Disable the use of grouping characters (as defined by the current locale).+ or (
— Specify the formatting style for positive and negative numbers. If + is used, the locale’s equivalent for + and – will be used. If ( is used, negative amounts are enclosed in parenthesis. If no specification is given, the default is +.!
— Suppress the currency symbol from the output string.-
— If present, it will make all fields left-justified (padded to the right), as opposed to the default which is for the fields to be right-justified (padded to the left).w
— A decimal digit string specifying a minimum field width. Field will be right-justified unless the flag – is used. Default value is 0 (zero).#n
— The maximum number of digits (n) expected to the left of the decimal character (e.g. the decimal point). It is used usually to keep formatted output aligned in the same columns, using the fill character if the number of digits is less than n. If the number of actual digits is bigger than n, then this specification is ignored..p
— A period followed by the number of digits (p) after the decimal character. If the value of p is 0 (zero), the decimal character and the digits to its right will be omitted. If no right precision is included, the default will dictated by the current local in use. The amount being formatted is rounded to the specified number of digits prior to formatting.i
— The number is formatted according to the locale’s international currency format (e.g. for the USA locale: USD 1,234.56).n
— The number is formatted according to the locale’s national currency format (e.g. for the de_DE locale: EU1.234,56).%
— Returns the % character.number
— The number to be formatted.
PHP money_format()
Return Value
The PHP money_format()
function returns the formatted string. Characters before and after the formatting string will be returned unchanged. Non-numeric number
causes returning NULL
and emitting E_WARNING
.
PHP money_format()
Working Examples
1. money_format() Example
<?php
$number = 1234.56;
// let's print the international format for the en_US locale
setlocale(LC_MONETARY, 'en_US');
echo money_format('%i', $number) . "\n";
// USD 1,234.56
// Italian national format with 2 decimals`
setlocale(LC_MONETARY, 'it_IT');
echo money_format('%.2n', $number) . "\n";
// Eu 1.234,56
// Using a negative number
$number = -1234.5672;
// US national format, using () for negative numbers
// and 10 digits for left precision
setlocale(LC_MONETARY, 'en_US');
echo money_format('%(#10n', $number) . "\n";
// ($ 1,234.57)
// Similar format as above, adding the use of 2 digits of right
// precision and '*' as a fill character
echo money_format('%=*(#10.2n', $number) . "\n";
// ($********1,234.57)
// Let's justify to the left, with 14 positions of width, 8 digits of
// left precision, 2 of right precision, without the grouping character
// and using the international format for the de_DE locale.
setlocale(LC_MONETARY, 'de_DE');
echo money_format('%=*^-14#8.2i', 1234.56) . "\n";
// Eu 1234,56****
// Let's add some blurb before and after the conversion specification
setlocale(LC_MONETARY, 'en_GB');
$fmt = 'The final value is %i (after a 10%% discount)';
echo money_format($fmt, 1234.56) . "\n";
// The final value is GBP 1,234.56 (after a 10% discount)
?>
Important Points about PHP money_format()
Function
The function
money_format()
is only defined if the system has strfmon capabilities. For example, Windows does not, somoney_format()
is undefined in Windows.The
LC_MONETARY
category of the locale settings, affects the behavior of this function. Usesetlocale()
to set to the appropriate default locale before using this function.
Additional Tips from Fellow Developers
Contributed By: tim
For most of us in the US, we don't want to see a "USD" for our currency symbol, so '%i' doesn't cut it. Here's what I used that worked to get what most people expect to see for a number format.
$number = 123.4
setlocale(LC_MONETARY, 'en_US.UTF-8');
money_format('%.2n', $number);
output:
$123.40
That gives me a dollar sign at the beginning, and 2 digits at the end.
Contributed By: Rafael M. Salvioni
This is a some function posted before, however various bugs were corrected.
Thank you to Stuart Roe by reporting the bug on printing signals.
<?php
/*
That it is an implementation of the function money_format for the
platforms that do not it bear.
The function accepts to same string of format accepts for the
original function of the PHP.
(Sorry. my writing in English is very bad)
The function is tested using PHP 5.1.4 in Windows XP
and Apache WebServer.
*/
function money_format($format, $number)
{
$regex = '/%((?:[\^!\-]|\+|\(|\=.)*)([0-9]+)?'.
'(?:#([0-9]+))?(?:\.([0-9]+))?([in%])/';
if (setlocale(LC_MONETARY, 0) == 'C') {
setlocale(LC_MONETARY, '');
}
$locale = localeconv();
preg_match_all($regex, $format, $matches, PREG_SET_ORDER);
foreach ($matches as $fmatch) {
$value = floatval($number);
$flags = array(
'fillchar' => preg_match('/\=(.)/', $fmatch[1], $match) ?
$match[1] : ' ',
'nogroup' => preg_match('/\^/', $fmatch[1]) > 0,
'usesignal' => preg_match('/\+|\(/', $fmatch[1], $match) ?
$match[0] : '+',
'nosimbol' => preg_match('/\!/', $fmatch[1]) > 0,
'isleft' => preg_match('/\-/', $fmatch[1]) > 0
);
$width = trim($fmatch[2]) ? (int)$fmatch[2] : 0;
$left = trim($fmatch[3]) ? (int)$fmatch[3] : 0;
$right = trim($fmatch[4]) ? (int)$fmatch[4] : $locale['int_frac_digits'];
$conversion = $fmatch[5];
$positive = true;
if ($value < 0) {
$positive = false;
$value *= -1;
}
$letter = $positive ? 'p' : 'n';
$prefix = $suffix = $cprefix = $csuffix = $signal = '';
$signal = $positive ? $locale['positive_sign'] : $locale['negative_sign'];
switch (true) {
case $locale["{$letter}_sign_posn"] == 1 && $flags['usesignal'] == '+':
$prefix = $signal;
break;
case $locale["{$letter}_sign_posn"] == 2 && $flags['usesignal'] == '+':
$suffix = $signal;
break;
case $locale["{$letter}_sign_posn"] == 3 && $flags['usesignal'] == '+':
$cprefix = $signal;
break;
case $locale["{$letter}_sign_posn"] == 4 && $flags['usesignal'] == '+':
$csuffix = $signal;
break;
case $flags['usesignal'] == '(':
case $locale["{$letter}_sign_posn"] == 0:
$prefix = '(';
$suffix = ')';
break;
}
if (!$flags['nosimbol']) {
$currency = $cprefix .
($conversion == 'i' ? $locale['int_curr_symbol'] : $locale['currency_symbol']) .
$csuffix;
} else {
$currency = '';
}
$space = $locale["{$letter}_sep_by_space"] ? ' ' : '';
$value = number_format($value, $right, $locale['mon_decimal_point'],
$flags['nogroup'] ? '' : $locale['mon_thousands_sep']);
$value = @explode($locale['mon_decimal_point'], $value);
$n = strlen($prefix) + strlen($currency) + strlen($value[0]);
if ($left > 0 && $left > $n) {
$value[0] = str_repeat($flags['fillchar'], $left - $n) . $value[0];
}
$value = implode($locale['mon_decimal_point'], $value);
if ($locale["{$letter}_cs_precedes"]) {
$value = $prefix . $currency . $space . $value . $suffix;
} else {
$value = $prefix . $value . $space . $currency . $suffix;
}
if ($width > 0) {
$value = str_pad($value, $width, $flags['fillchar'], $flags['isleft'] ?
STR_PAD_RIGHT : STR_PAD_LEFT);
}
$format = str_replace($fmatch[0], $value, $format);
}
return $format;
}
?>
Contributed By: todoventas
In Rafael M. Salvioni function localeconv(); returns an invalid array in my Windows XP SP3 running PHP 5.4.13 so to prevent the Warning Message: implode(): Invalid arguments passed i just add the $locale manually. For other languages just fill the array with the correct settings.
<?
$locale = array(
'decimal_point' => '.',
'thousands_sep' => '',
'int_curr_symbol' => 'EUR',
'currency_symbol' => '€',
'mon_decimal_point' => ',',
'mon_thousands_sep' => '.',
'positive_sign' => '',
'negative_sign' => '-',
'int_frac_digits' => 2,
'frac_digits' => 2,
'p_cs_precedes' => 0,
'p_sep_by_space' => 1,
'p_sign_posn' => 1,
'n_sign_posn' => 1,
'grouping' => array(),
'mon_grouping' => array(0 => 3, 1 => 3)
);
?>
Contributed By: jeremy
If money_format doesn't seem to be working properly, make sure you are defining a valid locale. For example, on Debian, 'en_US' is not a valid locale - you need 'en_US.UTF-8' or 'en_US.ISO-8559-1'.
This was frustrating me for a while. Debian has a list of valid locales at /usr/share/i18n/SUPPORTED; find yours there if it's not working properly.
PHP nl2br()
Function
What does nl2br()
do?
The PHP
function will inserts HTML line breaks before all newlines in a string.nl2br()
PHP nl2br()
Syntax
nl2br ( string $string [, bool $is_xhtml = TRUE ] ) : string
PHP nl2br()
Parameters
string
— The input string.is_xhtml
— Whether to use XHTML compatible line breaks or not.
PHP nl2br()
Return Value
The PHP nl2br()
function returns the altered string.
PHP nl2br()
Working Examples
1. Using nl2br()
<?php
echo nl2br("foo isn't\n bar");
?>
Output of the above code:
foo isn't<br />
bar
2. Generating valid HTML markup using the is_xhtml parameter
<?php
echo nl2br("Welcome\r\nThis is my HTML document", false);
?>
Output of the above code:
Welcome<br>
This is my HTML document
3. Various newline separators
<?php
$string = "This\r\nis\n\ra\nstring\r";
echo nl2br($string);
?>
Output of the above code:
This<br />
is<br />
a<br />
string<br />
Changelog for PHP nl2br() Function
5.3.0 — Added the optional is_xhtml
parameter. Before this version ‘<br />’ was always inserted.
Additional Tips from Fellow Developers
Contributed By: CGameProgrammer
It's important to remember that this function does NOT replace newlines with <br> tags. Rather, it inserts a <br> tag before each newline, but it still preserves the newlines themselves! This caused problems for me regarding a function I was writing -- I forgot the newlines were still being preserved.
If you don't want newlines, do:
<?php
$Result = str_replace( "\n", '<br />', $Text );
?>
Contributed By: ngkongs
To replace all linebreaks to <br />
the best solution (IMO) is:
<?php
function nl2br2($string) {
$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
return $string;
}
?>
because each OS have different ASCII chars for linebreak:
windows = \r\n
unix = \n
mac = \r
works perfect for me
Contributed By: N/A
Here's a more simple one:
<?php
/**
* Convert BR tags to nl
*
* @param string The string to convert
* @return string The converted string
*/
function br2nl($string)
{
return preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string);
}
?>
Enjoy
Contributed By: fquffio
Starting from PHP 4.3.10 and PHP 5.0.2, this should be the most correct way to replace <br /> and <br> tags with newlines and carriage returns.
<?php
/**
* Convert BR tags to newlines and carriage returns.
*
* @param string The string to convert
* @return string The converted string
*/
function br2nl ( $string )
{
return preg_replace('/\<br(\s*)?\/?\>/i', PHP_EOL, $string);
}
?>
(Please note this is a minor edit of this function: http://php.net/nl2br#86678 )
You might also want to be "platform specific", and therefore this function might be of some help:
<?php
/**
* Convert BR tags to newlines and carriage returns.
*
* @param string The string to convert
* @param string The string to use as line separator
* @return string The converted string
*/
function br2nl ( $string, $separator = PHP_EOL )
{
$separator = in_array($separator, array("\n", "\r", "\r\n", "\n\r", chr(30), chr(155), PHP_EOL)) ? $separator : PHP_EOL; // Checks if provided $separator is valid.
return preg_replace('/\<br(\s*)?\/?\>/i', $separator, $string);
}
?>
PHP nl_langinfo()
Function
What does nl_langinfo()
do?
The PHP
function will give you all of the elements, nl_langinfo()
nl_langinfo()
allows you to select any specific element.
PHP nl_langinfo()
Syntax
nl_langinfo ( int $item ) : string
PHP nl_langinfo()
Parameters
item
— item may be an integer value of the element or the constant name of the element. The following is a list of constant names for item that may be used and their description. Some of these constants may not be defined or hold no value for certain locales.
PHP nl_langinfo()
Return Value
The PHP nl_langinfo()
function returns the element as a string, or FALSE
if item
is not valid.
PHP number_format()
Function
What does number_format()
do?
The PHP
function will this function accepts either one, two, or four parameters (not three):number_format()
PHP number_format()
Syntax
number_format ( float $number [, int $decimals = 0 ] ) : string
number_format ( float $number , int $decimals = 0 , string $dec_point = "." , string $thousands_sep = "," ) : string
PHP number_format()
Parameters
number
— The number being formatted.decimals
— Sets the number of decimal points.dec_point
— Sets the separator for the decimal point.thousands_sep
— Sets the thousands separator.
PHP number_format()
Return Value
The PHP number_format()
function returns a formatted version of number
.
PHP number_format()
Working Examples
1. number_format() Example
<?php
$number = 1234.56;
// english notation (default)
$english_format_number = number_format($number);
// 1,235
// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56
$number = 1234.5678;
// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57
?>
Changelog for PHP number_format() Function
7.2.0 — number_format()
was changed to not being able to return -0, previously -0 could be returned for cases like where number
would be -0.01.
5.4.0 — This function now supports multiple bytes in dec_point
and thousands_sep
. Only the first byte of each separator was used in older versions.
Additional Tips from Fellow Developers
Contributed By: thomas
It's not explicitly documented; number_format also rounds:
<?php
$numbers = array(0.001, 0.002, 0.003, 0.004, 0.005, 0.006, 0.007, 0.008, 0.009);
foreach ($numbers as $number)
print $number."->".number_format($number, 2, '.', ',')."<br>";
?>
0.001->0.00
0.002->0.00
0.003->0.00
0.004->0.00
0.005->0.01
0.006->0.01
0.007->0.01
0.008->0.01
0.009->0.01
Contributed By: james
Outputs a human readable number.
<?php
# Output easy-to-read numbers
# by james at bandit.co.nz
function bd_nice_number($n) {
// first strip any formatting;
$n = (0+str_replace(",","",$n));
// is this a number?
if(!is_numeric($n)) return false;
// now filter it;
if($n>1000000000000) return round(($n/1000000000000),1).' trillion';
else if($n>1000000000) return round(($n/1000000000),1).' billion';
else if($n>1000000) return round(($n/1000000),1).' million';
else if($n>1000) return round(($n/1000),1).' thousand';
return number_format($n);
}
?>
Outputs:
247,704,360 -> 247.7 million
866,965,260,000 -> 867 billion
Contributed By: stm555
I ran across an issue where I wanted to keep the entered precision of a real value, without arbitrarily rounding off what the user had submitted.
I figured it out with a quick explode on the number before formatting. I could then format either side of the decimal.
<?php
function number_format_unlimited_precision($number,$decimal = '.')
{
$broken_number = explode($decimal,$number);
return number_format($broken_number[0]).$decimal.$broken_number[1];
}
?>
Contributed By: MarcM
For Zero fill - just use the sprintf() function
$pr_id = 1;
$pr_id = sprintf("%03d", $pr_id);
echo $pr_id;
//outputs 001
-----------------
$pr_id = 10;
$pr_id = sprintf("%03d", $pr_id);
echo $pr_id;
//outputs 010
-----------------
You can change %03d to %04d, etc.
PHP ord()
Function
What does ord()
do?
The PHP
function will convert the first byte of a string to a value between 0 and 255.ord()
PHP ord()
Syntax
ord ( string $string ) : int
PHP ord()
Parameters
string
— A character.
PHP ord()
Return Value
The PHP ord()
function returns an integer between 0 and 255.
PHP ord()
Working Examples
1. ord() example
<?php
$str = "\n";
if (ord($str) == 10) {
echo "The first character of \$str is a line feed.\n";
}
?>
2. Examining the individual bytes of a UTF-8 string
<?php
declare(encoding='UTF-8');
$str = "🐘";
for ( $pos=0; $pos < strlen($str); $pos ++ ) {
$byte = substr($str, $pos);
echo 'Byte ' . $pos . ' of $str has value ' . ord($byte) . PHP_EOL;
}
?>
Output of the above code:
Byte 0 of $str has value 240
Byte 1 of $str has value 159
Byte 2 of $str has value 144
Byte 3 of $str has value 152
Additional Tips from Fellow Developers
Contributed By: arglanir+phpnet
As ord() doesn't work with utf-8, and if you do not have access to mb_* functions, the following function will work well:
<?php
function ordutf8($string, &$offset) {
$code = ord(substr($string, $offset,1));
if ($code >= 128) { //otherwise 0xxxxxxx
if ($code < 224) $bytesnumber = 2; //110xxxxx
else if ($code < 240) $bytesnumber = 3; //1110xxxx
else if ($code < 248) $bytesnumber = 4; //11110xxx
$codetemp = $code - 192 - ($bytesnumber > 2 ? 32 : 0) - ($bytesnumber > 3 ? 16 : 0);
for ($i = 2; $i <= $bytesnumber; $i++) {
$offset ++;
$code2 = ord(substr($string, $offset, 1)) - 128; //10xxxxxx
$codetemp = $codetemp*64 + $code2;
}
$code = $codetemp;
}
$offset += 1;
if ($offset >= strlen($string)) $offset = -1;
return $code;
}
?>
$offset is a reference, as it is not easy to split a utf-8 char-by-char. Useful to iterate on a string:
<?php
$text = "abcàê߀abc";
$offset = 0;
while ($offset >= 0) {
echo $offset.": ".ordutf8($text, $offset)."\n";
}
/* returns:
0: 97
1: 98
2: 99
3: 224
5: 234
7: 223
9: 8364
12: 97
13: 98
14: 99
*/
?>
Feel free to adapt my code to fit your needs.
Contributed By: rowan dot collins
Regarding character sets, and whether or not this is "ASCII". Firstly, there is no such thing as "8-bit ASCII", so if it were ASCII it would only ever return integers up to 127. 8-bit ASCII-compatible encodings include the ISO 8859 family of encodings, which map various common characters to the values from 128 to 255. UTF-8 is also designed so that characters representable in 7-bit ASCII are coded the same; byte values higher than 127 in a UTF-8 string represent the beginning of a multi-byte character.
In fact, like most of PHP's string functions, this function isn't doing anything to do with character encoding at all - it is just interpreting a binary byte from a string as an unsigned integer. That is, ord(chr(200)) will always return 200, but what character chr(200) *means* will vary depending on what character encoding it is *interpreted* as part of (e.g. during display).
A technically correct description would be "Returns an integer representation of the first byte of a string, from 0 to 255. For single-byte encodings such as (7-bit) ASCII and the ISO 8859 family, this will correspond to the first character, and will be the position of that character in the encoding's mapping table. For multi-byte encodings, such as UTF-8 or UTF-16, the byte may not represent a complete character."
The link to asciitable.com should also be replaced by one which explains what character encoding it is displaying, as "Extended ASCII" is an ambiguous and misleading name.
PHP parse_str()
Function
What does parse_str()
do?
The PHP
function will parses parse_str()
encoded_string
as if it were the query string passed via a URL and sets variables in the current scope (or in the array if result
is provided).
PHP parse_str()
Syntax
parse_str ( string $encoded_string [, array &$result ] ) : void
PHP parse_str()
Parameters
encoded_string
— The input string.result
— If the second parameter result is present, variables are stored in this variable as array elements instead.
PHP parse_str()
Return Value
The PHP parse_str()
function returns d.
PHP parse_str()
Working Examples
1. Using parse_str()
<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
// Recommended
parse_str($str, $output);
echo $output['first']; // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz
// DISCOURAGED
parse_str($str);
echo $first; // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
?>
2. parse_str() name mangling
<?php
parse_str("My Value=Something");
echo $My_Value; // Something
parse_str("My Value=Something", $output);
echo $output['My_Value']; // Something
?>
Changelog for PHP parse_str() Function
7.2.0 — Usage of parse_str()
without a second parameter now emits an E_DEPRECATED
notice.
Important Points about PHP parse_str()
Function
Using this function without the
result
parameter is highly DISCOURAGED and DEPRECATED as of PHP 7.2.Dynamically setting variables in function’s scope suffers from exactly same problems as register_globals.
Read section on security of Using Register Globals explaining why it is dangerous.
All variables created (or values returned into array if second parameter is set) are already
urldecode()
d.To get the current QUERY_STRING, you may use the variable $_SERVER[‘QUERY_STRING’]. Also, you may want to read the section on variables from external sources.
The magic_quotes_gpc setting affects the output of this function, as
parse_str()
uses the same mechanism that PHP uses to populate the $_GET, $_POST, etc. variables.
Additional Tips from Fellow Developers
Contributed By: Evan K
It bears mentioning that the parse_str builtin does NOT process a query string in the CGI standard way, when it comes to duplicate fields. If multiple fields of the same name exist in a query string, every other web processing language would read them into an array, but PHP silently overwrites them:
<?php
# silently fails to handle multiple values
parse_str('foo=1&foo=2&foo=3');
# the above produces:
$foo = array('foo' => '3');
?>
Instead, PHP uses a non-standards compliant practice of including brackets in fieldnames to achieve the same effect.
<?php
# bizarre php-specific behavior
parse_str('foo[]=1&foo[]=2&foo[]=3');
# the above produces:
$foo = array('foo' => array('1', '2', '3') );
?>
This can be confusing for anyone who's used to the CGI standard, so keep it in mind. As an alternative, I use a "proper" querystring parser function:
<?php
function proper_parse_str($str) {
# result array
$arr = array();
# split on outer delimiter
$pairs = explode('&', $str);
# loop through each pair
foreach ($pairs as $i) {
# split into name and value
list($name,$value) = explode('=', $i, 2);
# if name already exists
if( isset($arr[$name]) ) {
# stick multiple values into an array
if( is_array($arr[$name]) ) {
$arr[$name][] = $value;
}
else {
$arr[$name] = array($arr[$name], $value);
}
}
# otherwise, simply stick it in a scalar
else {
$arr[$name] = $value;
}
}
# return result array
return $arr;
}
$query = proper_parse_str($_SERVER['QUERY_STRING']);
?>
Contributed By: shagshag
That's not says in the description but max_input_vars directive affects this function. If there are more input variables on the string than specified by this directive, an E_WARNING is issued, and further input variables are truncated from the request.
Contributed By: Olivier Mengué
Vladimir: the function is OK in how it deals with &.
& must only be used when outputing URLs in HTML/XML data.
You should ask yourself why you have & in your URL when you give it to parse_str.
PHP print()
Function
What does print()
do?
The PHP
function will outputs print()
arg
.
PHP print()
Syntax
print ( string $arg ) : int
PHP print()
Parameters
arg
— The input data.
PHP print()
Return Value
The PHP print()
function returns 1, always.
PHP print()
Working Examples
1. print examples
<?php
print("Hello World");
print "print() also works without parentheses.";
print "This spans
multiple lines. The newlines will be
output as well";
print "This spans\nmultiple lines. The newlines will be\noutput as well.";
print "escaping characters is done \"Like this\".";
// You can use variables inside a print statement
$foo = "foobar";
$bar = "barbaz";
print "foo is $foo"; // foo is foobar
// You can also use arrays
$bar = array("value" => "foo");
print "this is {$bar['value']} !"; // this is foo !
// Using single quotes will print the variable name, not the value
print 'foo is $foo'; // foo is $foo
// If you are not using any other characters, you can just print variables
print $foo; // foobar
print <<<END
This uses the "here document" syntax to output
multiple lines with $variable interpolation. Note
that the here document terminator must appear on a
line with just a semicolon no extra whitespace!
END;
?>
Additional Tips from Fellow Developers
Contributed By: user
Be careful when using print. Since print is a language construct and not a function, the parentheses around the argument is not required.
In fact, using parentheses can cause confusion with the syntax of a function and SHOULD be omited.
Most would expect the following behavior:
<?php
if (print("foo") && print("bar")) {
// "foo" and "bar" had been printed
}
?>
But since the parenthesis around the argument are not required, they are interpretet as part of the argument.
This means that the argument of the first print is
("foo") && print("bar")
and the argument of the second print is just
("bar")
For the expected behavior of the first example, you need to write:
<?php
if ((print "foo") && (print "bar")) {
// "foo" and "bar" had been printed
}
?>
Contributed By: danielxmorris @ gmail dotcom
I wrote a println function that determines whether a \n or a <br /> should be appended to the line depending on whether it's being executed in a shell or a browser window. People have probably thought of this before but I thought I'd post it anyway - it may help a couple of people.
<?php
function println ($string_message) {
$_SERVER['SERVER_PROTOCOL'] ? print "$string_message<br />" : print "$string_message\n";
}
?>
Examples:
Running in a browser:
<?php println ("Hello, world!"); ?>
Output: Hello, world!<br />
Running in a shell:
<?php println ("Hello, world!"); ?>
Output: Hello, world!\n
PHP printf()
Function
What does printf()
do?
The PHP
function will produces output according to printf()
format
.
PHP printf()
Syntax
printf ( string $format [, mixed $... ] ) : int
PHP printf()
Parameters
format
— The format string is composed of zero or more directives: ordinary characters (excluding %) that are copied directly to the result and conversion specifications, each of which results in fetching its own parameter....
—
PHP printf()
Return Value
The PHP printf()
function returns the length of the outputted string.
PHP printf()
Working Examples
1. printf(): various examples
<?php
$n = 43951789;
$u = -43951789;
$c = 65; // ASCII 65 is 'A'
// notice the double %%, this prints a literal '%' character
printf("%%b = '%b'\n", $n); // binary representation
printf("%%c = '%c'\n", $c); // print the ascii character, same as chr() function
printf("%%d = '%d'\n", $n); // standard integer representation
printf("%%e = '%e'\n", $n); // scientific notation
printf("%%u = '%u'\n", $n); // unsigned integer representation of a positive integer
printf("%%u = '%u'\n", $u); // unsigned integer representation of a negative integer
printf("%%f = '%f'\n", $n); // floating point representation
printf("%%o = '%o'\n", $n); // octal representation
printf("%%s = '%s'\n", $n); // string representation
printf("%%x = '%x'\n", $n); // hexadecimal representation (lower-case)
printf("%%X = '%X'\n", $n); // hexadecimal representation (upper-case)
printf("%%+d = '%+d'\n", $n); // sign specifier on a positive integer
printf("%%+d = '%+d'\n", $u); // sign specifier on a negative integer
?>
Output of the above code:
%b = '10100111101010011010101101'
%c = 'A'
%d = '43951789'
%e = '4.39518e+7'
%u = '43951789'
%u = '4251015507'
%f = '43951789.000000'
%o = '247523255'
%s = '43951789'
%x = '29ea6ad'
%X = '29EA6AD'
%+d = '+43951789'
%+d = '-43951789'
2. printf(): string specifiers
<?php
$s = 'monkey';
$t = 'many monkeys';
printf("[%s]\n", $s); // standard string output
printf("[%10s]\n", $s); // right-justification with spaces
printf("[%-10s]\n", $s); // left-justification with spaces
printf("[%010s]\n", $s); // zero-padding works on strings too
printf("[%'#10s]\n", $s); // use the custom padding character '#'
printf("[%10.9s]\n", $t); // right-justification but with a cutoff of 8 characters
printf("[%-10.9s]\n", $t); // left-justification but with a cutoff of 8 characters
?>
Output of the above code:
[monkey]
[ monkey]
[monkey ]
[0000monkey]
[####monkey]
[ many monk]
[many monk ]
Important Points about PHP printf()
Function
The c type specifier ignores padding and width
Attempting to use a combination of the string and width specifiers with character sets that require more than one byte per character may result in unexpected results
PHP quoted_printable_decode()
Function
What does quoted_printable_decode()
do?
The PHP
function will convert a quoted-printable string to an 8 bit string.quoted_printable_decode()
PHP quoted_printable_decode()
Syntax
quoted_printable_decode ( string $str ) : string
PHP quoted_printable_decode()
Parameters
str
— The input string.
PHP quoted_printable_decode()
Return Value
The PHP quoted_printable_decode()
function returns the 8-bit binary string.
PHP quoted_printable_encode()
Function
What does quoted_printable_encode()
do?
The PHP
function will convert a 8 bit string to a quoted-printable string.quoted_printable_encode()
PHP quoted_printable_encode()
Syntax
quoted_printable_encode ( string $str ) : string
PHP quoted_printable_encode()
Parameters
str
— The input string.
PHP quoted_printable_encode()
Return Value
The PHP quoted_printable_encode()
function returns the encoded string.
PHP quotemeta()
Function
What does quotemeta()
do?
The PHP
function will give you a version of str with a backslash character (\) before every character that is among these:quotemeta()
PHP quotemeta()
Syntax
quotemeta ( string $str ) : string
PHP quotemeta()
Parameters
str
— The input string.
PHP quotemeta()
Return Value
The PHP quotemeta()
function returns the string with meta characters quoted, or FALSE
if an empty string is given as str
.
PHP rtrim()
Function
What does rtrim()
do?
The PHP
function will strip whitespace (or other characters) from the end of a string.rtrim()
PHP rtrim()
Syntax
rtrim ( string $str [, string $character_mask ] ) : string
PHP rtrim()
Parameters
str
— The input string.character_mask
— You can also specify the characters you want to strip, by means of the character_mask parameter. Simply list all characters that you want to be stripped. With .. you can specify a range of characters.
PHP rtrim()
Return Value
The PHP rtrim()
function returns the modified string.
PHP rtrim()
Working Examples
1. Usage example of rtrim()
<?php
$text = "\t\tThese are a few words :) ... ";
$binary = "\x09Example string\x0A";
$hello = "Hello World";
var_dump($text, $binary, $hello);
print "\n";
$trimmed = rtrim($text);
var_dump($trimmed);
$trimmed = rtrim($text, " \t.");
var_dump($trimmed);
$trimmed = rtrim($hello, "Hdle");
var_dump($trimmed);
// trim the ASCII control characters at the end of $binary
// (from 0 to 31 inclusive)
$clean = rtrim($binary, "\x00..\x1F");
var_dump($clean);
?>
Output of the above code:
string(32) " These are a few words :) ... "
string(16) " Example string
"
string(11) "Hello World"
string(30) " These are a few words :) ..."
string(26) " These are a few words :)"
string(9) "Hello Wor"
string(15) " Example string"
Additional Tips from Fellow Developers
Contributed By: pinkgothic
I have an obsessive love for php's array functions given how extremely easy they've made complex string handling for me in various situations... so, have another string-rtrim() variant:
<?php
function strrtrim($message, $strip) {
// break message apart by strip string
$lines = explode($strip, $message);
$last = '';
// pop off empty strings at the end
do {
$last = array_pop($lines);
} while (empty($last) && (count($lines)));
// re-assemble what remains
return implode($strip, array_merge($lines, array($last)));
}
?>
Astonishingly, something I didn't expect, but: It completely compares to harmor's rstrtrim below, execution time wise. o_o Whee!
Contributed By: gbelanger
True, the Perl chomp() will only trim newline characters. There is, however, the Perl chop() function which is pretty much identical to the PHP rtrim()
---
Here's a quick way to recursively trim every element of an array, useful after the file() function :
<?php
# Reads /etc/passwd file an trims newlines on each entry
$aFileContent = file("/etc/passwd");
foreach ($aFileContent as $sKey => $sValue) {
$aFileContent[$sKey] = rtrim($sValue);
}
print_r($aFileContent);
?>
Contributed By: todd
This shows how rtrim works when using the optional charlist parameter:
rtrim reads a character, one at a time, from the optional charlist parameter and compares it to the end of the str string. If the characters match, it trims it off and starts over again, looking at the "new" last character in the str string and compares it to the first character in the charlist again. If the characters do not match, it moves to the next character in the charlist parameter comparing once again. It continues until the charlist parameter has been completely processed, one at a time, and the str string no longer contains any matches. The newly "rtrimmed" string is returned.
<?php
// Example 1:
rtrim('This is a short short sentence', 'short sentence');
// returns 'This is a'
// If you were expecting the result to be 'This is a short ',
// then you're wrong; the exact string, 'short sentence',
// isn't matched. Remember, character-by-character comparison!
// Example 2:
rtrim('This is a short short sentence', 'cents');
// returns 'This is a short short '
?>
Contributed By: pinkgothic
On the recurring subject of string-stripping instead of character-stripping rtrim() implementations... the simplest (with a caveat) is probably the basename() function. It has a second parameter that functions as a right-trim using whole strings:
<?php
echo basename('MooFoo', 'Foo');
?>
...outputs 'Moo'.
Since it also strips anything that looks like a directory, it's not quite identical with hacking a string off the end:
<?php
echo basename('Zoo/MooFoo', 'Foo');
?>
...still outputs 'Moo'.
But sometimes it gets the job done.
Contributed By: Unimagined
I needed a way to trim all white space and then a few chosen strings from the end of a string. So I wrote this class to reuse when stuff needs to be trimmed.
<?php
class cleaner {
function cleaner ($cuts,$pinfo) {
$ucut = "0";
$lcut = "0";
while ($cuts[$ucut]) {
$lcut++;
$ucut++;
}
$lcut = $lcut - 1;
$ucut = "0";
$rcut = "0";
$wiy = "start";
while ($wiy) {
if ($so) {
$ucut = "0";
$rcut = "0";
unset($so);
}
if (!$cuts[$ucut]) {
$so = "restart";
} else {
$pinfo = rtrim($pinfo);
$bpinfol = strlen($pinfo);
$tcut = $cuts[$ucut];
$pinfo = rtrim($pinfo,"$tcut");
$pinfol = strlen($pinfo);
if ($bpinfol == $pinfol) {
$rcut++;
if ($rcut == $lcut) {
unset($wiy);
}
$ucut++;
} else {
$so = "restart";
}
}
}
$this->cleaner = $pinfo;
}
}
$pinfo = "Well... I'm really bored...<br /><br> \n\t <br><br /><br> \r\r <br>\r<br /><br>\r \n<br> <br />\t";
$cuts = array('\n','\r','\t',' ',' ',' ','<br />','<br>','<br/>');
$pinfo = new cleaner($cuts,$pinfo);
$pinfo = $pinfo->cleaner;
print $pinfo;
?>
That class will take any string that you put in the $cust array and remove it from the end of the $pinfo string. It's useful for cleaning up comments, articles, or mail that users post to your site, making it so there's no extra blank space or blank lines.
PHP setlocale()
Function
What does setlocale()
do?
The PHP
function will sets locale information.setlocale()
PHP setlocale()
Syntax
setlocale ( int $category , string $locale [, string $... ] ) : string
setlocale ( int $category , array $locale ) : string
PHP setlocale()
Parameters
category
— category is a named constant specifying the category of the functions affected by the locale setting:locale
— If locale is NULL or the empty string “”, the locale names will be set from the values of environment variables with the same names as the above categories, or from “LANG”....
— (Optional string or array parameters to try as locale settings until success.)
PHP setlocale()
Return Value
The PHP setlocale()
function returns the new current locale, or FALSE
if the locale functionality is not implemented on your platform, the specified locale does not exist or the category name is invalid.
PHP setlocale()
Working Examples
1. setlocale() Examples
<?php
/* Set locale to Dutch */
setlocale(LC_ALL, 'nl_NL');
/* Output: vrijdag 22 december 1978 */
echo strftime("%A %e %B %Y", mktime(0, 0, 0, 12, 22, 1978));
/* try different possible locale names for german */
$loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
echo "Preferred locale for german on this system is '$loc_de'";
?>
2. setlocale() Examples for Windows
<?php
/* Set locale to Dutch */
setlocale(LC_ALL, 'nld_nld');
/* Output: vrijdag 22 december 1978 */
echo strftime("%A %d %B %Y", mktime(0, 0, 0, 12, 22, 1978));
/* try different possible locale names for german */
$loc_de = setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
echo "Preferred locale for german on this system is '$loc_de'";
?>
Changelog for PHP setlocale() Function
7.0.0 — Support for the category
parameter passed as a string has been removed. Only LC_* constants can be used as of this version.
5.3.0 — This function now throws an E_DEPRECATED
notice if a string is passed to the category
parameter instead of one of the LC_* constants.
Important Points about PHP setlocale()
Function
The locale information is maintained per process, not per thread. If you are running PHP on a multithreaded server API like IIS, HHVM or Apache on Windows, you may experience sudden changes in locale settings while a script is running, though the script itself never called
setlocale()
. This happens due to other scripts running in different threads of the same process at the same time, changing the process-wide locale usingsetlocale()
.On Windows, setlocale(LC_ALL, ”) sets the locale names from the system’s regional/language settings (accessible via Control Panel).
The return value of
setlocale()
depends on the system that PHP is running. It returns exactly what the system setlocale function returns.
Additional Tips from Fellow Developers
Contributed By: r dot nospam dot velseboer
Be careful with the LC_ALL setting, as it may introduce some unwanted conversions. For example, I used
setlocale (LC_ALL, "Dutch");
to get my weekdays in dutch on the page. From that moment on (as I found out many hours later) my floating point values from MYSQL where interpreted as integers because the Dutch locale wants a comma (,) instead of a point (.) before the decimals. I tried printf, number_format, floatval.... all to no avail. 1.50 was always printed as 1.00 :(
When I set my locale to :
setlocale (LC_TIME, "Dutch");
my weekdays are good now and my floating point values too.
I hope I can save some people the trouble of figuring this out by themselves.
Rob
Contributed By: russ
If you are looking for a getlocale() function simply pass 0 (zero) as the second parameter to setlocale().
Beware though if you use the category LC_ALL and some of the locales differ as a string containing all the locales is returned:
<?php
echo setlocale(LC_ALL, 0);
// LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;
// LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=C;LC_IDENTIFICATION=C
echo setlocale(LC_CTYPE, 0);
// en_US.UTF-8
setlocale(LC_ALL, "en_US.UTF-8");
echo setlocale(LC_ALL, 0);
// en_US.UTF-8
?>
If you are looking to store and reset the locales you could do something like this:
<?php
$originalLocales = explode(";", setlocale(LC_ALL, 0));
setlocale(LC_ALL, "nb_NO.utf8");
// Do something
foreach ($originalLocales as $localeSetting) {
if (strpos($localeSetting, "=") !== false) {
list ($category, $locale) = explode("=", $localeSetting);
}
else {
$category = LC_ALL;
$locale = $localeSetting;
}
setlocale($category, $locale);
}
?>
The above works here (Ubuntu Linux) but as the setlocale() function is just wrapping the equivalent system calls, your mileage may vary on the result.
Contributed By: Kari Sderholm aka Haprog
It took me a while to figure out how to get a Finnish locale correctly set on Ubuntu Server with Apache2 and PHP5.
At first the output for "locale -a" was this:
C
en_US.utf8
POSIX
I had to install a finnish language pack with
"sudo apt-get install language-pack-fi-base"
Now the output for "locale -a" is:
C
en_US.utf8
fi_FI.utf8
POSIX
The last thing you need to do after installing the correct language pack is restart Apache with "sudo apache2ctl restart". The locale "fi_FI.utf8" can then be used in PHP5 after restarting Apache.
For setting Finnish timezone and locale in PHP use:
<?php
date_default_timezone_set('Europe/Helsinki');
setlocale(LC_ALL, array('fi_FI.UTF-8','fi_FI@euro','fi_FI','finnish'));
?>
PHP sha1()
Function
What does sha1()
do?
The PHP
function will calculates the sha1 hash of sha1()
str
using the » US Secure Hash Algorithm 1.
PHP sha1()
Syntax
sha1 ( string $str [, bool $raw_output = FALSE ] ) : string
PHP sha1()
Parameters
str
— The input string.raw_output
— If the optional raw_output is set to TRUE, then the sha1 digest is instead returned in raw binary format with a length of 20, otherwise the returned value is a 40-character hexadecimal number.
PHP sha1()
Return Value
The PHP sha1()
function returns the sha1 hash as a string.
PHP sha1()
Working Examples
1. A sha1() example
<?php
$str = 'apple';
if (sha1($str) === 'd0be2dc421be4fcd0172e5afceea3970e2f3d940') {
echo "Would you like a green or red apple?";
}
?>
Important Points about PHP sha1()
Function
It is not recommended to use this function to secure passwords, due to the fast nature of this hashing algorithm. See the Password Hashing FAQ for details and best practices.
Additional Tips from Fellow Developers
Contributed By:
The suggestion below to double-hash your password is not a good idea. You are much much better off adding a variable salt to passwords before hashing (such as the username or other field that is dissimilar for every account).
Double hashing is *worse* security than a regular hash. What you're actually doing is taking some input $passwd, converting it to a string of exactly 32 characters containing only the characters [0-9][A-F], and then hashing *that*. You have just *greatly* increased the odds of a hash collision (ie. the odds that I can guess a phrase that will hash to the same value as your password).
sha1(md5($pass)) makes even less sense, since you're feeding in 128-bits of information to generate a 256-bit hash, so 50% of the resulting data is redundant. You have not increased security at all.
PHP sha1_file()
Function
What does sha1_file()
do?
The PHP
function will give you that hash. The hash is a 40-character hexadecimal number.sha1_file()
PHP sha1_file()
Syntax
sha1_file ( string $filename [, bool $raw_output = FALSE ] ) : string
PHP sha1_file()
Parameters
filename
— The filename of the file to hash.raw_output
— When TRUE, returns the digest in raw binary format with a length of 20.
PHP sha1_file()
Return Value
The PHP sha1_file()
function returns a string on success, FALSE
otherwise.
PHP sha1_file()
Working Examples
1. sha1_file() example
<?php
foreach(glob('/home/Kalle/myproject/*.php') as $ent)
{
if(is_dir($ent))
{
continue;
}
echo $ent . ' (SHA1: ' . sha1_file($ent) . ')', PHP_EOL;
}
?>
Changelog for PHP sha1_file() Function
5.1.0 — Changed the function to use the streams API. It means that you can use it with wrappers, like sha1_file(‘http://example.com/..’)
Additional Tips from Fellow Developers
Contributed By: xijque
Just for the record -
As some have pointed out, you have two ways to generate the hash of a file:
Method 1 [this function]: sha1_file($file)
Method 2: sha1(file_get_contents($file))
It's important to realize that these two methods are NOT the same thing. If they were, I seriously doubt this function would exist.
The key difference, as far as I can tell, is how the file's contents are loaded. The second method loads the entirety of $file into memory before passing it to sha1($str). Method two, however, loads the contents of $file as they are needed to create the hash.
If you can guarantee that you'll only ever have to hash relatively small files, this difference means very little. If you have larger ones, though, loading the entirety of file into memory is a bad idea: best case, you slow down your server as it tries to handle the request; worse case, you run out of memory and don't get your hash at all.
Just try to keep this in mind if you decide to load the file's contents yourself, in lieu of using this function. On my system, I was able to use this function to generate the hash of a 2.6GB file in 22 seconds, whereas I could not with the second method, due to an out-of-memory error (which took 185 seconds).
PHP similar_text()
Function
What does similar_text()
do?
The PHP
function will calculate the similarity between two strings.similar_text()
PHP similar_text()
Syntax
similar_text ( string $first , string $second [, float &$percent ] ) : int
PHP similar_text()
Parameters
first
— The first string.second
— The second string.percent
— By passing a reference as third argument,similar_text()
will calculate the similarity in percent, by dividing the result ofsimilar_text()
by the average of the lengths of the given strings times 100.
PHP similar_text()
Return Value
The PHP similar_text()
function returns the number of matching chars in both strings.
PHP similar_text()
Working Examples
1. similar_text() argument swapping example
first
Output of the above code:
similarity: 5 (71.428571428571 %)
similarity: 3 (42.857142857143 %)
Important Points about PHP similar_text()
Function
Swapping the
first
andsecond
may yield a different result; see the example below.
Additional Tips from Fellow Developers
Contributed By:
Hey there,
Be aware when using this function, that the order of passing the strings is very important if you want to calculate the percentage of similarity, in fact, altering the variables will give a very different result, example :
<?php
$var_1 = 'PHP IS GREAT';
$var_2 = 'WITH MYSQL';
similar_text($var_1, $var_2, $percent);
echo $percent;
// 27.272727272727
similar_text($var_2, $var_1, $percent);
echo $percent;
// 18.181818181818
?>
Contributed By: daniel dot karbach
Please note that this function calculates a similarity of 0 (zero) for two empty strings.
<?php
similar_text("", "", $sim);
echo $sim; // "0"
?>
Contributed By: vasyl
Recursive algorithm usually is very elegant one. I found a way to get better precision without the recursion. Imagine two different (or same) length ribbons with letters on each. You simply shifting one ribbon to left till it matches the letter the first.
<?php
function similarity($str1, $str2) {
$len1 = strlen($str1);
$len2 = strlen($str2);
$max = max($len1, $len2);
$similarity = $i = $j = 0;
while (($i < $len1) && isset($str2[$j])) {
if ($str1[$i] == $str2[$j]) {
$similarity++;
$i++;
$j++;
} elseif ($len1 < $len2) {
$len1++;
$j++;
} elseif ($len1 > $len2) {
$i++;
$len1--;
} else {
$i++;
$j++;
}
}
return round($similarity / $max, 2);
}
$str1 = '12345678901234567890';
$str2 = '12345678991234567890';
echo 'Similarity: ' . (similarity($str1, $str2) * 100) . '%';
?>
Contributed By: ryan
Note that this function is case sensitive:
<?php
$var1 = 'Hello';
$var2 = 'Hello';
$var3 = 'hello';
echo similar_text($var1, $var2); // 5
echo similar_text($var1, $var3); // 4
PHP soundex()
Function
What does soundex()
do?
The PHP
function will calculates the soundex key of soundex()
str
.
PHP soundex()
Syntax
soundex ( string $str ) : string
PHP soundex()
Parameters
str
— The input string.
PHP soundex()
Return Value
The PHP soundex()
function returns the soundex key as a string.
PHP soundex()
Working Examples
1. Soundex Examples
<?php
soundex("Euler") == soundex("Ellery"); // E460
soundex("Gauss") == soundex("Ghosh"); // G200
soundex("Hilbert") == soundex("Heilbronn"); // H416
soundex("Knuth") == soundex("Kant"); // K530
soundex("Lloyd") == soundex("Ladd"); // L300
soundex("Lukasiewicz") == soundex("Lissajous"); // L222
?>
Additional Tips from Fellow Developers
Contributed By: nicolas dot zimmer
Since soundex() does not produce optimal results for German language
we have written a function to implement the so called Kölner Phonetik
(Cologne Phonetic).
Please find the code below in the hope it might be useful:
<?php
/**
* A function for retrieving the Kölner Phonetik value of a string
*
* As described at http://de.wikipedia.org/wiki/Kölner_Phonetik
* Based on Hans Joachim Postel: Die Kölner Phonetik.
* Ein Verfahren zur Identifizierung von Personennamen auf der
* Grundlage der Gestaltanalyse.
* in: IBM-Nachrichten, 19. Jahrgang, 1969, S. 925-931
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* @package phonetics
* @version 1.0
* @link http://www.einfachmarke.de
* @license GPL 3.0 <http://www.gnu.org/licenses/>
* @copyright 2008 by einfachmarke.de
* @author Nicolas Zimmer <nicolas dot zimmer at einfachmarke.de>
*/
function cologne_phon($word){
/**
* @param string $word string to be analyzed
* @return string $value represents the Kölner Phonetik value
* @access public
*/
//prepare for processing
$word=strtolower($word);
$substitution=array(
"ä"=>"a",
"ö"=>"o",
"ü"=>"u",
"ß"=>"ss",
"ph"=>"f"
);
foreach ($substitution as $letter=>$substitution) {
$word=str_replace($letter,$substitution,$word);
}
$len=strlen($word);
//Rule for exeptions
$exceptionsLeading=array(
4=>array("ca","ch","ck","cl","co","cq","cu","cx"),
8=>array("dc","ds","dz","tc","ts","tz")
);
$exceptionsFollowing=array("sc","zc","cx","kx","qx");
//Table for coding
$codingTable=array(
0=>array("a","e","i","j","o","u","y"),
1=>array("b","p"),
2=>array("d","t"),
3=>array("f","v","w"),
4=>array("c","g","k","q"),
48=>array("x"),
5=>array("l"),
6=>array("m","n"),
7=>array("r"),
8=>array("c","s","z"),
);
for ($i=0;$i<$len;$i++){
$value[$i]="";
//Exceptions
if ($i==0 AND $word[$i].$word[$i+1]=="cr") $value[$i]=4;
foreach ($exceptionsLeading as $code=>$letters) {
if (in_array($word[$i].$word[$i+1],$letters)){
$value[$i]=$code;
} }
if ($i!=0 AND (in_array($word[$i-1].$word[$i],
$exceptionsFollowing))) {
value[$i]=8;
}
//Normal encoding
if ($value[$i]==""){
foreach ($codingTable as $code=>$letters) {
if (in_array($word[$i],$letters))$value[$i]=$code;
}
}
}
//delete double values
$len=count($value);
for ($i=1;$i<$len;$i++){
if ($value[$i]==$value[$i-1]) $value[$i]="";
}
//delete vocals
for ($i=1;$i>$len;$i++){//omitting first characer code and h
if ($value[$i]==0) $value[$i]="";
}
$value=array_filter($value);
$value=implode("",$value);
return $value;
}
?>
Contributed By: Dirk Hoeschen – Feenders de
I made some improvements to the "Cologne Phonetic" function of niclas zimmer. Key and value of the arrays are inverted to uses simple arrays instead of multidimensional arrays. Therefore all loops and iterations are not longer necessary to find the matching value for a char.
I put the function into a static class and moved the array declarations outside the function.
The result is more reliable and five times faster than the original.
<?php
class CologneHash() {
static $eLeading = array("ca" => 4, "ch" => 4, "ck" => 4, "cl" => 4, "co" => 4, "cq" => 4, "cu" => 4, "cx" => 4, "dc" => 8, "ds" => 8, "dz" => 8, "tc" => 8, "ts" => 8, "tz" => 8);
static $eFollow = array("sc", "zc", "cx", "kx", "qx");
static $codingTable = array("a" => 0, "e" => 0, "i" => 0, "j" => 0, "o" => 0, "u" => 0, "y" => 0,
"b" => 1, "p" => 1, "d" => 2, "t" => 2, "f" => 3, "v" => 3, "w" => 3, "c" => 4, "g" => 4, "k" => 4, "q" => 4,
"x" => 48, "l" => 5, "m" => 6, "n" => 6, "r" => 7, "c" => 8, "s" => 8, "z" => 8);
public static function getCologneHash($word)
{
if (empty($word)) return false;
$len = strlen($word);
for ($i = 0; $i < $len; $i++) {
$value[$i] = "";
//Exceptions
if ($i == 0 && $word[$i] . $word[$i + 1] == "cr") {
$value[$i] = 4;
}
if (isset($word[$i + 1]) && isset(self::$eLeading[$word[$i] . $word[$i + 1]])) {
$value[$i] = self::$eLeading[$word[$i] . $word[$i + 1]];
}
if ($i != 0 && (in_array($word[$i - 1] . $word[$i], self::$eFollow))) {
$value[$i] = 8;
}
// normal encoding
if ($value[$i]=="") {
if (isset(self::$codingTable[$word[$i]])) {
$value[$i] = self::$codingTable[$word[$i]];
}
}
}
// delete double values
$len = count($value);
for ($i = 1; $i < $len; $i++) {
if ($value[$i] == $value[$i - 1]) {
$value[$i] = "";
}
}
// delete vocals
for ($i = 1; $i > $len; $i++) {
// omitting first characer code and h
if ($value[$i] == 0) {
$value[$i] = "";
}
}
$value = array_filter($value);
$value = implode("", $value);
return $value;
}
}
?>
PHP sprintf()
Function
What does sprintf()
do?
The PHP
function will give you a string produced according to the formatting string sprintf()
format
.
PHP sprintf()
Syntax
sprintf ( string $format [, mixed $... ] ) : string
PHP sprintf()
Parameters
format
— The format string is composed of zero or more directives: ordinary characters (excluding %) that are copied directly to the result and conversion specifications, each of which results in fetching its own parameter....
—
PHP sprintf()
Return Value
The PHP sprintf()
function returns a string produced according to the formatting string format
, or FALSE
on failure.
PHP sprintf()
Working Examples
1. Argument swapping
<?php
$num = 5;
$location = 'tree';
$format = 'There are %d monkeys in the %s';
echo sprintf($format, $num, $location);
?>
Output of the above code:
There are 5 monkeys in the tree
2. Specifying padding character
<?php
echo sprintf("%'.9d\n", 123);
echo sprintf("%'.09d\n", 123);
?>
Output of the above code:
......123
000000123
3. Position specifier with other specifiers
<?php
$format = 'The %2$s contains %1$04d monkeys';
echo sprintf($format, $num, $location);
?>
Output of the above code:
The tree contains 0005 monkeys
4. sprintf(): zero-padded integers
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
5. sprintf(): formatting currency
<?php
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
echo $money;
echo "\n";
$formatted = sprintf("%01.2f", $money);
echo $formatted;
?>
Output of the above code:
123.1
123.10
6. sprintf(): scientific notation
<?php
$number = 362525200;
echo sprintf("%.3e", $number);
?>
Output of the above code:
3.625e+8
Important Points about PHP sprintf()
Function
The c type specifier ignores padding and width
Attempting to use a combination of the string and width specifiers with character sets that require more than one byte per character may result in unexpected results
Additional Tips from Fellow Developers
Contributed By: Alex R. Gibbs
1. A plus sign ('+') means put a '+' before positive numbers while a minus sign ('-') means left justify. The documentation incorrectly states that they are interchangeable. They produce unique results that can be combined:
<?php
echo sprintf ("|%+4d|%+4d|\n", 1, -1);
echo sprintf ("|%-4d|%-4d|\n", 1, -1);
echo sprintf ("|%+-4d|%+-4d|\n", 1, -1);
?>
outputs:
| +1| -1|
|1 |-1 |
|+1 |-1 |
2. Padding with a '0' is different than padding with other characters. Zeros will only be added at the front of a number, after any sign. Other characters will be added before the sign, or after the number:
<?php
echo sprintf ("|%04d|\n", -2);
echo sprintf ("|%':4d|\n", -2);
echo sprintf ("|%-':4d|\n", -2);
// Specifying both "-" and "0" creates a conflict with unexpected results:
echo sprintf ("|%-04d|\n", -2);
// Padding with other digits behaves like other non-zero characters:
echo sprintf ("|%-'14d|\n", -2);
echo sprintf ("|%-'04d|\n", -2);
?>
outputs:
|-002|
|::-2|
|-2::|
|-2 |
|-211|
|-2 |
Contributed By: remy dot damour
With printf() and sprintf() functions, escape character is not backslash '\' but rather '%'.
Ie. to print '%' character you need to escape it with itself:
<?php
printf('%%%s%%', 'koko'); #output: '%koko%'
?>
Contributed By: kontakt
There are already some comments on using sprintf to force leading leading zeros but the examples only include integers. I needed leading zeros on floating point numbers and was surprised that it didn't work as expected.
Example:
<?php
sprintf('%02d', 1);
?>
This will result in 01. However, trying the same for a float with precision doesn't work:
<?php
sprintf('%02.2f', 1);
?>
Yields 1.00.
This threw me a little off. To get the desired result, one needs to add the precision (2) and the length of the decimal seperator "." (1). So the correct pattern would be
<?php
sprintf('%05.2f', 1);
?>
Output: 01.00
Please see http://stackoverflow.com/a/28739819/413531 for a more detailed explanation.
Contributed By: jfgrissom
I had a nightmare trying to find the two's complement of a 32 bit number.
I got this from http://www.webmasterworld.com/forum88/13334.htm (credit where credit is due... =P )
Quote: ...find out the 2's complement of any number, which is -(pow(2, n) - N) where n is the number of bits and N is the number for which to find out its 2's complement.
This worked magic for me... previously I was trying to use
sprintf ("%b",$32BitDecimal);
But it always returned 10000000000000000000000 when the $32BitDecimal value got above 2,000,000,000.
This -(pow(2, n) - N)
Worked remarkably well and was very accurate.
Hope this helps someone fighting with two's complement in PHP.
Contributed By: Jay Gilford
I created this function a while back to save on having to combine mysql_real_escape_string onto all the params passed into a sprintf. it works literally the same as the sprintf other than that it doesn't require you to escape your inputs. Hope its of some use to people
<?php
function mressf()
{
$args = func_get_args();
if (count($args) < 2)
return false;
$query = array_shift($args);
$args = array_map('mysql_real_escape_string', $args);
array_unshift($args, $query);
$query = call_user_func_array('sprintf', $args);
return $query;
}
?>
Regards
Jay
Jaygilford.com
PHP sscanf()
Function
What does sscanf()
do?
The PHP
function will parses input from a string according to a format.sscanf()
PHP sscanf()
Syntax
sscanf ( string $str , string $format [, mixed &$... ] ) : mixed
PHP sscanf()
Parameters
str
— The input string being parsed.format
— The interpreted format for str, which is described in the documentation forsprintf()
with following differences:...
— Optionally pass in variables by reference that will contain the parsed values.
PHP sscanf()
Return Value
The PHP sscanf()
function returns d as an array. Otherwise, if optional parameters are passed, the function will return the number of assigned values. The optional parameters must be passed by reference.
PHP sscanf()
Working Examples
1. sscanf() Example
<?php
// getting the serial number
list($serial) = sscanf("SN/2350001", "SN/%d");
// and the date of manufacturing
$mandate = "January 01 2000";
list($month, $day, $year) = sscanf($mandate, "%s %d %d");
echo "Item $serial was manufactured on: $year-" . substr($month, 0, 3) . "-$day\n";
?>
2. sscanf() – using optional parameters
<?php
// get author info and generate DocBook entry
$auth = "24\tLewis Carroll";
$n = sscanf($auth, "%d\t%s %s", $id, $first, $last);
echo "<author id='$id'>
<firstname>$first</firstname>
<surname>$last</surname>
</author>\n";
?>
Additional Tips from Fellow Developers
Contributed By: jon
This function is a great way to get integer rgb values from the html equivalent hex.
list($r, $g, $b) = sscanf('00ccff', '%2x%2x%2x');
Contributed By: mikewillitsgmail.com
FYI - if you are trying to scan from a string which contains a filename with extension. For instance:
<?php
$out = sscanf('file_name.gif', 'file_%s.%s', $fpart1, $fpart2);
?>
The scanned string in the $fpart1 parameter turns out to be 'name.gif' and $fpart2 will be NULL.
To get around this you can simply replace the "." with a space or another "white-space like" string sequence.
I didn't see any other comments on regarding string literals which contain a '.' so I thought I'd mention it. The subtle characteristics of having "white-space delimited" content I think can be a source of usage contention. Obviously, another way to go is regular expressions in this instance, but for newer users this may be helpful.
Just in case someone else spent 10 minutes of frustration like I did. This was seen on PHP Version 5.2.3-1ubuntu6.3.
Searching the bug reports shows another users misunderstanding: http://bugs.php.net/bug.php?id=7793
PHP str_getcsv()
Function
What does str_getcsv()
do?
The PHP
function will give you an array containing the fields read.str_getcsv()
PHP str_getcsv()
Syntax
str_getcsv ( string $input [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]] ) : array
PHP str_getcsv()
Parameters
input
— The string to parse.delimiter
— Set the field delimiter (one character only).enclosure
— Set the field enclosure character (one character only).escape
— Set the escape character (at most one character). Defaults as a backslash (\) An empty string (“”) disables the proprietary escape mechanism.
PHP str_getcsv()
Return Value
The PHP str_getcsv()
function returns an indexed array containing the fields read.
Changelog for PHP str_getcsv() Function
7.4.0 — The escape
parameter now interprets an empty string as signal to disable the proprietary escape mechanism. Formerly, an empty string was treated like the default parameter value.
Important Points about PHP str_getcsv()
Function
The locale settings are taken into account by this function. If LC_CTYPE is e.g. en_US.UTF-8, strings in one-byte encodings may be read wrongly by this function.
Additional Tips from Fellow Developers
Contributed By: james
[Editor's Note (cmb): that does not produce the desired results, if fields contain linebreaks.]
Handy one liner to parse a CSV file into an array
<?php
$csv = array_map('str_getcsv', file('data.csv'));
?>
Contributed By: starrychloe
Based on James' line, this will create an array of associative arrays with the first row column headers as the keys.
<?php
$csv = array_map('str_getcsv', file($file));
array_walk($csv, function(&$a) use ($csv) {
$a = array_combine($csv[0], $a);
});
array_shift($csv); # remove column header
?>
This will yield something like
[2] => Array
(
[Campaign ID] => 295095038
[Ad group ID] => 22460178158
[Keyword ID] => 3993587178
Contributed By: durik
As the str_getcsv(), unlike to fgetcsv(), does not parse the rows in CSV string, I have found following easy workaround:
<?php
$Data = str_getcsv($CsvString, "\n"); //parse the rows
foreach($Data as &$Row) $Row = str_getcsv($Row, ";"); //parse the items in rows
?>
Why not use explode() instead of str_getcsv() to parse rows? Because explode() would not treat possible enclosured parts of string or escaped characters correctly.
Contributed By: Jay Williams
Here is a quick and easy way to convert a CSV file to an associated array:
<?php
/**
* @link http://gist.github.com/385876
*/
function csv_to_array($filename='', $delimiter=',')
{
if(!file_exists($filename) || !is_readable($filename))
return FALSE;
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE)
{
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
{
if(!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
fclose($handle);
}
return $data;
}
?>
Contributed By: Ryan Rubley
@normadize - that is a nice start, but it fails on situations where a field is empty but quoted (returning a string with one double quote instead of an empty string) and cases like """""foo""""" that should result in ""foo"" but instead return "foo". I also get a row with 1 empty field at the end because of the final CRLF in the CSV. Plus, I don't really like the !!Q!! magic or urlencoding to get around things. Also, \R doesn't work in pcre on any of my php installations.
Here is my take on this, without anonymous functions (so it works on PHP < 5.3), and without your options (because I believe the only correct way to parse according to the RFC would be $skip_empty_lines = false and $trim_fields = false).
//parse a CSV file into a two-dimensional array
//this seems as simple as splitting a string by lines and commas, but this only works if tricks are performed
//to ensure that you do NOT split on lines and commas that are inside of double quotes.
function parse_csv($str)
{
//match all the non-quoted text and one series of quoted text (or the end of the string)
//each group of matches will be parsed with the callback, with $matches[1] containing all the non-quoted text,
//and $matches[3] containing everything inside the quotes
$str = preg_replace_callback('/([^"]*)("((""|[^"])*)"|$)/s', 'parse_csv_quotes', $str);
//remove the very last newline to prevent a 0-field array for the last line
$str = preg_replace('/\n$/', '', $str);
//split on LF and parse each line with a callback
return array_map('parse_csv_line', explode("\n", $str));
}
//replace all the csv-special characters inside double quotes with markers using an escape sequence
function parse_csv_quotes($matches)
{
//anything inside the quotes that might be used to split the string into lines and fields later,
//needs to be quoted. The only character we can guarantee as safe to use, because it will never appear in the unquoted text, is a CR
//So we're going to use CR as a marker to make escape sequences for CR, LF, Quotes, and Commas.
$str = str_replace("\r", "\rR", $matches[3]);
$str = str_replace("\n", "\rN", $str);
$str = str_replace('""', "\rQ", $str);
$str = str_replace(',', "\rC", $str);
//The unquoted text is where commas and newlines are allowed, and where the splits will happen
//We're going to remove all CRs from the unquoted text, by normalizing all line endings to just LF
//This ensures us that the only place CR is used, is as the escape sequences for quoted text
return preg_replace('/\r\n?/', "\n", $matches[1]) . $str;
}
//split on comma and parse each field with a callback
function parse_csv_line($line)
{
return array_map('parse_csv_field', explode(',', $line));
}
//restore any csv-special characters that are part of the data
function parse_csv_field($field) {
$field = str_replace("\rC", ',', $field);
$field = str_replace("\rQ", '"', $field);
$field = str_replace("\rN", "\n", $field);
$field = str_replace("\rR", "\r", $field);
return $field;
}
Contributed By: normadize -a- gmail -d- com
Like some other users here noted, str_getcsv() cannot be used if you want to comply with either the RFC or with most spreadsheet tools like Excel or Google Docs.
These tools do not escape commas or new lines, but instead place double-quotes (") around the field. If there are any double-quotes in the field, these are escaped with another double-quote (" becomes ""). All this may look odd, but it is what the RFC and most tools do ...
For instance, try exporting as .csv a Google Docs spreadsheet (File > Download as > .csv) which has new lines and commas as part of the field values and see how the .csv content looks, then try to parse it using str_getcsv() ... it will spectacularly regardless of the arguments you pass to it.
Here is a function that can handle everything correctly, and more:
- doesn't use any for or while loops,
- it allows for any separator (any string of any length),
- option to skip empty lines,
- option to trim fields,
- can handle UTF8 data too (although .csv files are likely non-unicode).
Here is the more human readable version of the function:
<?php
// returns a two-dimensional array or rows and fields
function parse_csv ($csv_string, $delimiter = ",", $skip_empty_lines = true, $trim_fields = true)
{
$enc = preg_replace('/(?<!")""/', '!!Q!!', $csv_string);
$enc = preg_replace_callback(
'/"(.*?)"/s',
function ($field) {
return urlencode(utf8_encode($field[1]));
},
$enc
);
$lines = preg_split($skip_empty_lines ? ($trim_fields ? '/( *\R)+/s' : '/\R+/s') : '/\R/s', $enc);
return array_map(
function ($line) use ($delimiter, $trim_fields) {
$fields = $trim_fields ? array_map('trim', explode($delimiter, $line)) : explode($delimiter, $line);
return array_map(
function ($field) {
return str_replace('!!Q!!', '"', utf8_decode(urldecode($field)));
},
$fields
);
},
$lines
);
}
?>
Since this is not using any loops, you can actually write it as a one-line statement (one-liner).
Here's the function using just one line of code for the function body, formatted nicely though:
<?php
// returns the same two-dimensional array as above, but with a one-liner code
function parse_csv ($csv_string, $delimiter = ",", $skip_empty_lines = true, $trim_fields = true)
{
return array_map(
function ($line) use ($delimiter, $trim_fields) {
return array_map(
function ($field) {
return str_replace('!!Q!!', '"', utf8_decode(urldecode($field)));
},
$trim_fields ? array_map('trim', explode($delimiter, $line)) : explode($delimiter, $line)
);
},
preg_split(
$skip_empty_lines ? ($trim_fields ? '/( *\R)+/s' : '/\R+/s') : '/\R/s',
preg_replace_callback(
'/"(.*?)"/s',
function ($field) {
return urlencode(utf8_encode($field[1]));
},
$enc = preg_replace('/(?<!")""/', '!!Q!!', $csv_string)
)
)
);
}
?>
Replace !!Q!! with another placeholder if you wish.
Have fun.
Contributed By: dejiakala
I wanted the best of the 2 solutions by james at moss dot io and Jay Williams (csv_to_array()) - create associative array from a CSV file with a header row.
<?php
$array = array_map('str_getcsv', file('data.csv'));
$header = array_shift($array);
array_walk($array, '_combine_array', $header);
function _combine_array(&$row, $key, $header) {
$row = array_combine($header, $row);
}
?>
Then I thought why not try some benchmarking? I grabbed a sample CSV file with 50,000 rows (10 columns each) and Vulcan Logic Disassembler (VLD) which hooks into the Zend Engine and dumps all the opcodes (execution units) of a script - see http://pecl.php.net/package/vld and example here: http://fabien.potencier.org/article/8/print-vs-echo-which-one-is-faster
Result:
array_walk() and array_map() - 39 opcodes
csv_to_array() - 69 opcodes
PHP str_ireplace()
Function
What does str_ireplace()
do?
The PHP
function will case-insensitive version of str_ireplace()
str_replace()
.
PHP str_ireplace()
Syntax
str_ireplace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) : mixed
PHP str_ireplace()
Parameters
search
— The value being searched for, otherwise known as the needle. An array may be used to designate multiple needles.replace
— The replacement value that replaces found search values. An array may be used to designate multiple replacements.subject
— The string or array being searched and replaced on, otherwise known as the haystack.count
— If passed, this will be set to the number of replacements performed.
PHP str_ireplace()
Return Value
The PHP str_ireplace()
function returns a string or an array of replacements.
PHP str_ireplace()
Working Examples
1. str_ireplace() example
<?php
$bodytag = str_ireplace("%body%", "black", "<body text=%BODY%>");
echo $bodytag; // <body text=black>
?>
Important Points about PHP str_ireplace()
Function
Because
str_ireplace()
replaces left to right, it might replace a previously inserted value when doing multiple replacements. Example #2 in thestr_replace()
documentation demonstrates how this may affect you in practice.
Additional Tips from Fellow Developers
Contributed By: sawdust
Here's a different approach to search result keyword highlighting that will match all keyword sub strings in a case insensitive manner and preserve case in the returned text. This solution first grabs all matches within $haystack in a case insensitive manner, and the secondly loops through each of those matched sub strings and applies a case sensitive replace in $haystack. This way each unique (in terms of case) instance of $needle is operated on individually allowing a case sensitive replace to be done in order to preserve the original case of each unique instance of $needle.
<?php
function highlightStr($haystack, $needle, $highlightColorValue) {
// return $haystack if there is no highlight color or strings given, nothing to do.
if (strlen($highlightColorValue) < 1 || strlen($haystack) < 1 || strlen($needle) < 1) {
return $haystack;
}
preg_match_all("/$needle+/i", $haystack, $matches);
if (is_array($matches[0]) && count($matches[0]) >= 1) {
foreach ($matches[0] as $match) {
$haystack = str_replace($match, '<span style="background-color:'.$highlightColorValue.';">'.$match.'</span>', $haystack);
}
}
return $haystack;
}
?>
PHP str_pad()
Function
What does str_pad()
do?
The PHP
function will pad a string to a certain length with another string.str_pad()
PHP str_pad()
Syntax
str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] ) : string
PHP str_pad()
Parameters
input
— The input string.pad_length
— If the value of pad_length is negative, less than, or equal to the length of the input string, no padding takes place, and input will be returned.pad_string
— Note: The pad_string may be truncated if the required number of padding characters can’t be evenly divided by the pad_string’s length.pad_type
— Optional argument pad_type can be STR_PAD_RIGHT, STR_PAD_LEFT, or STR_PAD_BOTH. If pad_type is not specified it is assumed to be STR_PAD_RIGHT.
PHP str_pad()
Return Value
The PHP str_pad()
function returns the padded string.
PHP str_pad()
Working Examples
1. str_pad() example
<?php
$input = "Alien";
echo str_pad($input, 10); // produces "Alien "
echo str_pad($input, 10, "-=", STR_PAD_LEFT); // produces "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH); // produces "__Alien___"
echo str_pad($input, 6, "___"); // produces "Alien_"
echo str_pad($input, 3, "*"); // produces "Alien"
?>
Important Points about PHP str_pad()
Function
The
pad_string
may be truncated if the required number of padding characters can’t be evenly divided by thepad_string
‘s length.
Additional Tips from Fellow Developers
Contributed By: Marjune
Since the default pad_type is STR_PAD_RIGHT. using STR_PAD_BOTH were always favor in the right pad if the required number of padding characters can't be evenly divided.
e.g
<?php
echo str_pad("input", 10, "pp", STR_PAD_BOTH ); // ppinputppp
echo str_pad("input", 6, "p", STR_PAD_BOTH ); // inputp
echo str_pad("input", 8, "p", STR_PAD_BOTH ); //pinputpp
?>
Contributed By:
A proper unicode string padder;
<?php
mb_internal_encoding('utf-8'); // @important
function str_pad_unicode($str, $pad_len, $pad_str = ' ', $dir = STR_PAD_RIGHT) {
$str_len = mb_strlen($str);
$pad_str_len = mb_strlen($pad_str);
if (!$str_len && ($dir == STR_PAD_RIGHT || $dir == STR_PAD_LEFT)) {
$str_len = 1; // @debug
}
if (!$pad_len || !$pad_str_len || $pad_len <= $str_len) {
return $str;
}
$result = null;
$repeat = ceil($str_len - $pad_str_len + $pad_len);
if ($dir == STR_PAD_RIGHT) {
$result = $str . str_repeat($pad_str, $repeat);
$result = mb_substr($result, 0, $pad_len);
} else if ($dir == STR_PAD_LEFT) {
$result = str_repeat($pad_str, $repeat) . $str;
$result = mb_substr($result, -$pad_len);
} else if ($dir == STR_PAD_BOTH) {
$length = ($pad_len - $str_len) / 2;
$repeat = ceil($length / $pad_str_len);
$result = mb_substr(str_repeat($pad_str, $repeat), 0, floor($length))
. $str
. mb_substr(str_repeat($pad_str, $repeat), 0, ceil($length));
}
return $result;
}
?>
Test;
<?php
// needs ie. "test.php" file encoded in "utf-8 without bom"
$s = '...';
for ($i = 3; $i <= 1000; $i++) {
$s1 = str_pad($s, $i, 'AO', STR_PAD_BOTH); // can not inculde unicode char!!!
$s2 = str_pad_unicode($s, $i, 'ÄÖ', STR_PAD_BOTH);
$sl1 = strlen($s1);
$sl2 = mb_strlen($s2);
echo "len $sl1: $s1 \n";
echo "len $sl2: $s2 \n";
echo "\n";
if ($sl1 != $sl2) die("Fail!");
}
?>
Output;
len 3: ...
len 3: ...
len 4: ...A
len 4: ...Ä
len 5: A...A
len 5: Ä...Ä
len 6: A...AO
len 6: Ä...ÄÖ
...
Contributed By: wes
Multibyte version:
<?php
function mb_str_pad($str, $pad_len, $pad_str = ' ', $dir = STR_PAD_RIGHT, $encoding = NULL)
{
$encoding = $encoding === NULL ? mb_internal_encoding() : $encoding;
$padBefore = $dir === STR_PAD_BOTH || $dir === STR_PAD_LEFT;
$padAfter = $dir === STR_PAD_BOTH || $dir === STR_PAD_RIGHT;
$pad_len -= mb_strlen($str, $encoding);
$targetLen = $padBefore && $padAfter ? $pad_len / 2 : $pad_len;
$strToRepeatLen = mb_strlen($pad_str, $encoding);
$repeatTimes = ceil($targetLen / $strToRepeatLen);
$repeatedString = str_repeat($pad_str, max(0, $repeatTimes)); // safe if used with valid utf-8 strings
$before = $padBefore ? mb_substr($repeatedString, 0, floor($targetLen), $encoding) : '';
$after = $padAfter ? mb_substr($repeatedString, 0, ceil($targetLen), $encoding) : '';
return $before . $str . $after;
}
?>
PHP str_repeat()
Function
What does str_repeat()
do?
The PHP
function will give you str_repeat()
input
repeated multiplier
times.
PHP str_repeat()
Syntax
str_repeat ( string $input , int $multiplier ) : string
PHP str_repeat()
Parameters
input
— The string to be repeated.multiplier
— Number of time the input string should be repeated.
PHP str_repeat()
Return Value
The PHP str_repeat()
function returns the repeated string.
PHP str_repeat()
Working Examples
1. str_repeat() example
<?php
echo str_repeat("-=", 10);
?>
Output of the above code:
-=-=-=-=-=-=-=-=-=-=
Additional Tips from Fellow Developers
Contributed By: Damien Bezborodov
Here is a simple one liner to repeat a string multiple times with a separator:
<?php
implode($separator, array_fill(0, $multiplier, $input));
?>
Example script:
<?php
// How I like to repeat a string using standard PHP functions
$input = 'bar';
$multiplier = 5;
$separator = ',';
print implode($separator, array_fill(0, $multiplier, $input));
print "\n";
// Say, this comes in handy with count() on an array that we want to use in an
// SQL query such as 'WHERE foo IN (...)'
$args = array('1', '2', '3');
print implode(',', array_fill(0, count($args), '?'));
print "\n";
?>
Example Output:
bar,bar,bar,bar,bar
?,?,?
PHP str_replace()
Function
What does str_replace()
do?
The PHP
function will replace all occurrences of the search string with the replacement string.str_replace()
PHP str_replace()
Syntax
str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) : mixed
PHP str_replace()
Parameters
search
— The value being searched for, otherwise known as the needle. An array may be used to designate multiple needles.replace
— The replacement value that replaces found search values. An array may be used to designate multiple replacements.subject
— The string or array being searched and replaced on, otherwise known as the haystack.count
— If passed, this will be set to the number of replacements performed.
PHP str_replace()
Return Value
The PHP str_replace()
function returns a string or an array with the replaced values.
PHP str_replace()
Working Examples
1. Basic str_replace() examples
<?php
// Provides: <body text='black'>
$bodytag = str_replace("%body%", "black", "<body text='%body%'>");
// Provides: Hll Wrld f PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace($vowels, "", "Hello World of PHP");
// Provides: You should eat pizza, beer, and ice cream every day
$phrase = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy = array("pizza", "beer", "ice cream");
$newphrase = str_replace($healthy, $yummy, $phrase);
// Provides: 2
$str = str_replace("ll", "", "good golly miss molly!", $count);
echo $count;
?>
2. Examples of potential str_replace() gotchas
<?php
// Order of replacement
$str = "Line 1\nLine 2\rLine 3\r\nLine 4\n";
$order = array("\r\n", "\n", "\r");
$replace = '<br />';
// Processes \r\n's first so they aren't converted twice.
$newstr = str_replace($order, $replace, $str);
// Outputs F because A is replaced with B, then B is replaced with C, and so on...
// Finally E is replaced with F, because of left to right replacements.
$search = array('A', 'B', 'C', 'D', 'E');
$replace = array('B', 'C', 'D', 'E', 'F');
$subject = 'A';
echo str_replace($search, $replace, $subject);
// Outputs: apearpearle pear
// For the same reason mentioned above
$letters = array('a', 'p');
$fruit = array('apple', 'pear');
$text = 'a p';
$output = str_replace($letters, $fruit, $text);
echo $output;
?>
Important Points about PHP str_replace()
Function
Because
str_replace()
replaces left to right, it might replace a previously inserted value when doing multiple replacements. See also the examples in this document.This function is case-sensitive. Use
str_ireplace()
for case-insensitive replace.
Additional Tips from Fellow Developers
Contributed By: nikolaz dot tang
A faster way to replace the strings in multidimensional array is to json_encode() it, do the str_replace() and then json_decode() it, like this:
<?php
function str_replace_json($search, $replace, $subject){
return json_decode(str_replace($search, $replace, json_encode($subject)));
}
?>
This method is almost 3x faster (in 10000 runs.) than using recursive calling and looping method, and 10x simpler in coding.
Compared to:
<?php
function str_replace_deep($search, $replace, $subject)
{
if (is_array($subject))
{
foreach($subject as &$oneSubject)
$oneSubject = str_replace_deep($search, $replace, $oneSubject);
unset($oneSubject);
return $subject;
} else {
return str_replace($search, $replace, $subject);
}
}
?>
Contributed By: moostende
Note that this does not replace strings that become part of replacement strings. This may be a problem when you want to remove multiple instances of the same repetative pattern, several times in a row.
If you want to remove all dashes but one from the string '-aaa----b-c-----d--e---f' resulting in '-aaa-b-c-d-e-f', you cannot use str_replace. Instead, use preg_replace:
<?php
$challenge = '-aaa----b-c-----d--e---f';
echo str_replace('--', '-', $challenge).'<br>';
echo preg_replace('/--+/', '-', $challenge).'<br>';
?>
This outputs the following:
-aaa--b-c---d-e--f
-aaa-b-c-d-e-f
Contributed By: Wes Foster
Feel free to optimize this using the while/for or anything else, but this is a bit of code that allows you to replace strings found in an associative array.
For example:
<?php
$replace = array(
'dog' => 'cat',
'apple' => 'orange'
'chevy' => 'ford'
);
$string = 'I like to eat an apple with my dog in my chevy';
echo str_replace_assoc($replace,$string);
// Echo: I like to eat an orange with my cat in my ford
?>
Here is the function:
<?php
function strReplaceAssoc(array $replace, $subject) {
return str_replace(array_keys($replace), array_values($replace), $subject);
}
?>
[Jun 1st, 2010 - EDIT BY thiago AT php DOT net: Function has been replaced with an updated version sent by ljelinek AT gmail DOT com]
Contributed By: Alberto Lepe
Be careful when replacing characters (or repeated patterns in the FROM and TO arrays):
For example:
<?php
$arrFrom = array("1","2","3","B");
$arrTo = array("A","B","C","D");
$word = "ZBB2";
echo str_replace($arrFrom, $arrTo, $word);
?>
I would expect as result: "ZDDB"
However, this return: "ZDDD"
(Because B = D according to our array)
To make this work, use "strtr" instead:
<?php
$arr = array("1" => "A","2" => "B","3" => "C","B" => "D");
$word = "ZBB2";
echo strtr($word,$arr);
?>
This returns: "ZDDB"
Contributed By: David Holt
Be aware that if you use this for filtering & sanitizing some form of user input, or remove ALL instances of a string, there's another gotcha to watch out for:
// Remove all double characters
$string="1001011010";
$string=str_replace(array("11","00"),"",$string);
// Output: "110010"
$string="<ht<html>ml> Malicious code </<html>html> etc";
$string=str_replace(array("<html>","</html>"),"",$string);
// Output: "<html> Malicious code </html> etc"
Contributed By: jay_knows_(all)uk
This strips out horrible MS word characters.
Just keep fine tuning it until you get what you need, you'll see ive commented some out which caused problems for me.
There could be some that need adding in, but its a start to anyone who wishes to make their own custom function.
<?php
function msword_conversion($str)
{
$str = str_replace(chr(130), ',', $str); // baseline single quote
$str = str_replace(chr(131), 'NLG', $str); // florin
$str = str_replace(chr(132), '"', $str); // baseline double quote
$str = str_replace(chr(133), '...', $str); // ellipsis
$str = str_replace(chr(134), '**', $str); // dagger (a second footnote)
$str = str_replace(chr(135), '***', $str); // double dagger (a third footnote)
$str = str_replace(chr(136), '^', $str); // circumflex accent
$str = str_replace(chr(137), 'o/oo', $str); // permile
$str = str_replace(chr(138), 'Sh', $str); // S Hacek
$str = str_replace(chr(139), '<', $str); // left single guillemet
// $str = str_replace(chr(140), 'OE', $str); // OE ligature
$str = str_replace(chr(145), "'", $str); // left single quote
$str = str_replace(chr(146), "'", $str); // right single quote
// $str = str_replace(chr(147), '"', $str); // left double quote
// $str = str_replace(chr(148), '"', $str); // right double quote
$str = str_replace(chr(149), '-', $str); // bullet
$str = str_replace(chr(150), '-–', $str); // endash
$str = str_replace(chr(151), '--', $str); // emdash
// $str = str_replace(chr(152), '~', $str); // tilde accent
// $str = str_replace(chr(153), '(TM)', $str); // trademark ligature
$str = str_replace(chr(154), 'sh', $str); // s Hacek
$str = str_replace(chr(155), '>', $str); // right single guillemet
// $str = str_replace(chr(156), 'oe', $str); // oe ligature
$str = str_replace(chr(159), 'Y', $str); // Y Dieresis
$str = str_replace('°C', '°C', $str); // Celcius is used quite a lot so it makes sense to add this in
$str = str_replace('£', '£', $str);
$str = str_replace("'", "'", $str);
$str = str_replace('"', '"', $str);
$str = str_replace('–', '–', $str);
return $str;
}
?>
PHP str_rot13()
Function
What does str_rot13()
do?
The PHP
function will give you the resulting string.str_rot13()
PHP str_rot13()
Syntax
str_rot13 ( string $str ) : string
PHP str_rot13()
Parameters
str
— The input string.
PHP str_rot13()
Return Value
The PHP str_rot13()
function returns the ROT13 version of the given string.
PHP str_rot13()
Working Examples
1. str_rot13() example
<?php
echo str_rot13('PHP 4.3.0'); // CUC 4.3.0
?>
Additional Tips from Fellow Developers
Contributed By: shaun
I was reminded again of the desire for a generic str_rot function. Character manipulation loops in PHP are slow compared to their C counterparts, so here's a tuned version of the previous function I posted. It's 1.6 times as fast, mainly by avoiding chr() calls.
<?php
function str_rot($s, $n = 13) {
static $letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$n = (int)$n % 26;
if (!$n) return $s;
if ($n == 13) return str_rot13($s);
for ($i = 0, $l = strlen($s); $i < $l; $i++) {
$c = $s[$i];
if ($c >= 'a' && $c <= 'z') {
$s[$i] = $letters[(ord($c) - 71 + $n) % 26];
} else if ($c >= 'A' && $c <= 'Z') {
$s[$i] = $letters[(ord($c) - 39 + $n) % 26 + 26];
}
}
return $s;
}
?>
But using strtr() you can get something 10 times as fast as the above :
<?php
function str_rot($s, $n = 13) {
static $letters = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz';
$n = (int)$n % 26;
if (!$n) return $s;
if ($n < 0) $n += 26;
if ($n == 13) return str_rot13($s);
$rep = substr($letters, $n * 2) . substr($letters, 0, $n * 2);
return strtr($s, $letters, $rep);
}
?>
This technique is faster because PHP's strtr is implemented in C using a byte lookup table (it has O(m + n) complexity). However, PHP 6 will use Unicode, so I guess(?) strtr will then have to be implemented with a search for each character (O(m * n)). Using strtr might still be faster since it offloads the character manipulation to C rather than PHP, but I don't really know. Take your pick.
Happy coding!
(Benchmark code):
<?php
for ($k = 0; $k < 10; $k++) {
$s = 'The quick brown fox jumps over the lazy dog.';
$t = microtime(1);
for ($i = 0; $i < 1000; $i++) $s = str_rot($s, $i);
$t = microtime(1) - $t;
echo number_format($t, 3) . "\n";
}
?>
PHP str_shuffle()
Function
What does str_shuffle()
do?
The PHP
function will str_shuffle()
str_shuffle()
shuffles a string. One permutation of all possible is created.
PHP str_shuffle()
Syntax
str_shuffle ( string $str ) : string
PHP str_shuffle()
Parameters
str
— The input string.
PHP str_shuffle()
Return Value
The PHP str_shuffle()
function returns the shuffled string.
PHP str_shuffle()
Working Examples
1. str_shuffle() example
<?php
$str = 'abcdef';
$shuffled = str_shuffle($str);
// This will echo something like: bfdaec
echo $shuffled;
?>
Changelog for PHP str_shuffle() Function
7.1.0 — The internal randomization algorithm has been changed to use the » Mersenne Twister Random Number Generator instead of the libc rand function.
Important Points about PHP str_shuffle()
Function
This function does not generate cryptographically secure values, and should not be used for cryptographic purposes. If you need a cryptographically secure value, consider using
random_int()
,random_bytes()
, oropenssl_random_pseudo_bytes()
instead.
Additional Tips from Fellow Developers
Contributed By: jojersztajner
Aoccdrnig to rseearch at an Elingsh uinervtisy, it deosn't mttaer in waht oredr the ltteers in a wrod are, the olny iprmoatnt tihng is that the frist and lsat ltteer is at the rghit pclae. The rset can be a toatl mses and you can sitll raed it wouthit a porbelm. Tihs is bcuseae we do not raed ervey lteter by it slef but the wrod as a wlohe.
Hree's a cdoe taht slerbmcas txet in tihs way:
<?php
function scramble_word($word) {
if (strlen($word) < 2)
return $word;
else
return $word{0} . str_shuffle(substr($word, 1, -1)) . $word{strlen($word) - 1};
}
echo preg_replace('/(\w+)/e', 'scramble_word("\1")', 'A quick brown fox jumped over the lazy dog.');
?>
It may be ufseul if you wnat to cetare an aessblicce CTCPAHA.
Contributed By: blamoo2
This function is affected by srand():
<?php
srand(12345);
echo str_shuffle('Randomize me') . '<br/>'; // "demmiezr aon"
echo str_shuffle('Randomize me') . '<br/>'; // "izadmeo rmen"
srand(12345);
echo str_shuffle('Randomize me') . '<br/>'; // "demmiezr aon" again
?>
Contributed By:
A proper unicode string shuffle;
<?php
function str_shuffle_unicode($str) {
$tmp = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
shuffle($tmp);
return join("", $tmp);
}
?>
$str = "Şeker yârim"; // My sweet love
echo str_shuffle($str); // i�eymrŢekr �
echo str_shuffle_unicode($str); // Şr mreyeikâ
PHP str_split()
Function
What does str_split()
do?
The PHP
function will converts a string to an array.str_split()
PHP str_split()
Syntax
str_split ( string $string [, int $split_length = 1 ] ) : array
PHP str_split()
Parameters
string
— The input string.split_length
— Maximum length of the chunk.
PHP str_split()
Return Value
The PHP str_split()
function returns d array will be broken down into chunks with each being split_length
in length, otherwise each chunk will be one character in length.
PHP str_split()
Working Examples
1. Example uses of str_split()
<?php
$str = "Hello Friend";
$arr1 = str_split($str);
$arr2 = str_split($str, 3);
print_r($arr1);
print_r($arr2);
?>
Output of the above code:
Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
[5] =>
[6] => F
[7] => r
[8] => i
[9] => e
[10] => n
[11] => d
)
Array
(
[0] => Hel
[1] => lo
[2] => Fri
[3] => end
)
Important Points about PHP str_split()
Function
str_split()
will split into bytes, rather than characters when dealing with a multi-byte encoded string.
Additional Tips from Fellow Developers
Contributed By:
A proper unicode string split;
<?php
function str_split_unicode($str, $l = 0) {
if ($l > 0) {
$ret = array();
$len = mb_strlen($str, "UTF-8");
for ($i = 0; $i < $len; $i += $l) {
$ret[] = mb_substr($str, $i, $l, "UTF-8");
}
return $ret;
}
return preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY);
}
?>
$s = "Ilık süt"; // Mild milk
print_r(str_split($s, 3));
print_r(str_split_unicode($s, 3));
Array
(
[0] => Il�
[1] => �k
[2] => sü
[3] => t
)
Array
(
[0] => Ilı
[1] => k s
[2] => üt
)
Contributed By:
A new version of "str_split_unicode" prev.
<?php
function str_split_unicode($str, $length = 1) {
$tmp = preg_split('~~u', $str, -1, PREG_SPLIT_NO_EMPTY);
if ($length > 1) {
$chunks = array_chunk($tmp, $length);
foreach ($chunks as $i => $chunk) {
$chunks[$i] = join('', (array) $chunk);
}
$tmp = $chunks;
}
return $tmp;
}
?>
$s = 'Özgür Yazılım!'; // Open Source!
print_r(str_split_unicode($s));
print_r(str_split_unicode($s, 3));
Array
(
[0] => Ö
[1] => z
[2] => g
[3] => ü
[4] => r
[5] =>
[6] => Y
[7] => a
[8] => z
[9] => ı
[10] => l
[11] => ı
[12] => m
[13] => !
)
Array
(
[0] => Özg
[1] => ür
[2] => Yaz
[3] => ılı
[4] => m!
)
PHP str_word_count()
Function
What does str_word_count()
do?
The PHP
function will give youstr_word_count()
PHP str_word_count()
Syntax
str_word_count ( string $string [, int $format = 0 [, string $charlist ]] ) : mixed
PHP str_word_count()
Parameters
string
— The stringformat
— Specify the return value of this function. The current supported values are:charlist
— A list of additional characters which will be considered as ‘word’
PHP str_word_count()
Return Value
The PHP str_word_count()
function returns an array or an integer, depending on the format
chosen.
PHP str_word_count()
Working Examples
1. A str_word_count() example
<?php
$str = "Hello fri3nd, you're
looking good today!";
print_r(str_word_count($str, 1));
print_r(str_word_count($str, 2));
print_r(str_word_count($str, 1, 'àáãç3'));
echo str_word_count($str);
?>
Output of the above code:
Array
(
[0] => Hello
[1] => fri
[2] => nd
[3] => you're
[4] => looking
[5] => good
[6] => today
)
Array
(
[0] => Hello
[6] => fri
[10] => nd
[14] => you're
[29] => looking
[46] => good
[51] => today
)
Array
(
[0] => Hello
[1] => fri3nd
[2] => you're
[3] => looking
[4] => good
[5] => today
)
7
Changelog for PHP str_word_count() Function
5.1.0 — Added the charlist
parameter
Additional Tips from Fellow Developers
Contributed By: cito
<?php
/***
* This simple utf-8 word count function (it only counts)
* is a bit faster then the one with preg_match_all
* about 10x slower then the built-in str_word_count
*
* If you need the hyphen or other code points as word-characters
* just put them into the [brackets] like [^\p{L}\p{N}\'\-]
* If the pattern contains utf-8, utf8_encode() the pattern,
* as it is expected to be valid utf-8 (using the u modifier).
**/
// Jonny 5's simple word splitter
function str_word_count_utf8($str) {
return count(preg_split('~[^\p{L}\p{N}\']+~u',$str));
}
?>
Contributed By: splogamurugan
We can also specify a range of values for charlist.
<?php
$str = "Hello fri3nd, you're
looking good today!
look1234ing";
print_r(str_word_count($str, 1, '0..3'));
?>
will give the result as
Array ( [0] => Hello [1] => fri3nd [2] => you're [3] => looking [4] => good [5] => today [6] => look123 [7] => ing )
PHP strcasecmp()
Function
What does strcasecmp()
do?
The PHP
function will binary safe case-insensitive string comparison.strcasecmp()
PHP strcasecmp()
Syntax
strcasecmp ( string $str1 , string $str2 ) : int
PHP strcasecmp()
Parameters
str1
— The first stringstr2
— The second string
PHP strcasecmp()
Return Value
The PHP strcasecmp()
function returns < 0 if str1
is less than str2
; > 0 if str1
is greater than str2
, and 0 if they are equal.
PHP strcasecmp()
Working Examples
1. strcasecmp() example
<?php
$var1 = "Hello";
$var2 = "hello";
if (strcasecmp($var1, $var2) == 0) {
echo '$var1 is equal to $var2 in a case-insensitive string comparison';
}
?>
Additional Tips from Fellow Developers
Contributed By: chris
A simple multibyte-safe case-insensitive string comparison:
<?php
function mb_strcasecmp($str1, $str2, $encoding = null) {
if (null === $encoding) { $encoding = mb_internal_encoding(); }
return strcmp(mb_strtoupper($str1, $encoding), mb_strtoupper($str2, $encoding));
}
?>
Caveat: watch out for edge cases like "ß".
Contributed By: Anonymous
The sample above is only true on some platforms that only use a simple 'C' locale, where individual bytes are considered as complete characters that are converted to lowercase before being differentiated.
Other locales (see LC_COLLATE and LC_ALL) use the difference of collation order of characters, where characters may be groups of bytes taken from the input strings, or simply return -1, 0, or 1 as the collation order is not simply defined by comparing individual characters but by more complex rules.
Don't base your code on a specific non null value returned by strcmp() or strcasecmp(): it is not portable. Just consider the sign of the result and be sure to use the correct locale!
PHP strchr()
Function
What does strchr()
do?
The PHP
function will this function is an alias of: strchr()
strstr()
.
PHP strchr()
Syntax
PHP strchr()
Parameters
This function does not accept any parameters.
PHP strcmp()
Function
What does strcmp()
do?
The PHP
function will note that this comparison is case sensitive.strcmp()
PHP strcmp()
Syntax
strcmp ( string $str1 , string $str2 ) : int
PHP strcmp()
Parameters
str1
— The first string.str2
— The second string.
PHP strcmp()
Return Value
The PHP strcmp()
function returns < 0 if str1
is less than str2
; > 0 if str1
is greater than str2
, and 0 if they are equal.
PHP strcmp()
Working Examples
1. strcmp() example
<?php
$var1 = "Hello";
$var2 = "hello";
if (strcmp($var1, $var2) !== 0) {
echo '$var1 is not equal to $var2 in a case sensitive string comparison';
}
?>
Additional Tips from Fellow Developers
Contributed By: jendoj
If you rely on strcmp for safe string comparisons, both parameters must be strings, the result is otherwise extremely unpredictable.
For instance you may get an unexpected 0, or return values of NULL, -2, 2, 3 and -3.
strcmp("5", 5) => 0
strcmp("15", 0xf) => 0
strcmp(61529519452809720693702583126814, 61529519452809720000000000000000) => 0
strcmp(NULL, false) => 0
strcmp(NULL, "") => 0
strcmp(NULL, 0) => -1
strcmp(false, -1) => -2
strcmp("15", NULL) => 2
strcmp(NULL, "foo") => -3
strcmp("foo", NULL) => 3
strcmp("foo", false) => 3
strcmp("foo", 0) => 1
strcmp("foo", 5) => 1
strcmp("foo", array()) => NULL + PHP Warning
strcmp("foo", new stdClass) => NULL + PHP Warning
strcmp(function(){}, "") => NULL + PHP Warning
Contributed By: lehal2
I hope this will give you a clear idea how strcmp works internally.
<?php
$str1 = "b";
echo ord($str1); //98
echo "<br/>";
$str2 = "t";
echo ord($str2); //116
echo "<br/>";
echo ord($str1)-ord($str2);//-18
$str1 = "bear";
$str2 = "tear";
$str3 = "";
echo "<pre>";
echo strcmp($str1, $str2); // -18
echo "<br/>";
echo strcmp($str2, $str1); //18
echo "<br/>";
echo strcmp($str2, $str2); //0
echo "<br/>";
echo strcmp($str2, $str3); //4
echo "<br/>";
echo strcmp($str3, $str2); //-4
echo "<br/>";
echo strcmp($str3, $str3); // 0
echo "</pre>";
?>
Contributed By: Rob Wiesler
One big caveat - strings retrieved from the backtick operation may be zero terminated (C-style), and therefore will not be equal to the non-zero terminated strings (roughly Pascal-style) normal in PHP. The workaround is to surround every `` pair or shell_exec() function with the trim() function. This is likely to be an issue with other functions that invoke shells; I haven't bothered to check.
On Debian Lenny (and RHEL 5, with minor differences), I get this:
====PHP====
<?php
$sz = `pwd`;
$ps = "/var/www";
echo "Zero-terminated string:<br />sz = ".$sz."<br />str_split(sz) = "; print_r(str_split($sz));
echo "<br /><br />";
echo "Pascal-style string:<br />ps = ".$ps."<br />str_split(ps) = "; print_r(str_split($ps));
echo "<br /><br />";
echo "Normal results of comparison:<br />";
echo "sz == ps = ".($sz == $ps ? "true" : "false")."<br />";
echo "strcmp(sz,ps) = ".strcmp($sz,$ps);
echo "<br /><br />";
echo "Comparison with trim()'d zero-terminated string:<br />";
echo "trim(sz) = ".trim($sz)."<br />";
echo "str_split(trim(sz)) = "; print_r(str_split(trim($sz))); echo "<br />";
echo "trim(sz) == ps = ".(trim($sz) == $ps ? "true" : "false")."<br />";
echo "strcmp(trim(sz),ps) = ".strcmp(trim($sz),$ps);
?>
====Output====
Zero-terminated string:
sz = /var/www
str_split(sz) = Array ( [0] => / [1] => v [2] => a [3] => r [4] => / [5] => w [6] => w [7] => w [8] => )
Pascal-style string:
ps = /var/www
str_split(ps) = Array ( [0] => / [1] => v [2] => a [3] => r [4] => / [5] => w [6] => w [7] => w )
Normal results of comparison:
sz == ps = false
strcmp(sz,ps) = 1
Comparison with trim()'d zero-terminated string:
trim(sz) = /var/www
str_split(trim(sz)) = Array ( [0] => / [1] => v [2] => a [3] => r [4] => / [5] => w [6] => w [7] => w )
trim(sz) == ps = true
strcmp(trim(sz),ps) = 0
Contributed By: frewuill
Hey be sure the string you are comparing has not special characters like '\n' or something like that.
PHP strcoll()
Function
What does strcoll()
do?
The PHP
function will note that this comparison is case sensitive, and unlike strcoll()
strcmp()
this function is not binary safe.
PHP strcoll()
Syntax
strcoll ( string $str1 , string $str2 ) : int
PHP strcoll()
Parameters
str1
— The first string.str2
— The second string.
PHP strcoll()
Return Value
The PHP strcoll()
function returns < 0 if str1
is less than str2
; > 0 if str1
is greater than str2
, and 0 if they are equal.
PHP strcspn()
Function
What does strcspn()
do?
The PHP
function will find length of initial segment not matching mask.strcspn()
PHP strcspn()
Syntax
strcspn ( string $subject , string $mask [, int $start [, int $length ]] ) : int
PHP strcspn()
Parameters
subject
— The string to examine.mask
— The string containing every disallowed character.start
— The position in subject to start searching.length
— The length of the segment from subject to examine.
PHP strcspn()
Return Value
The PHP strcspn()
function returns the length of the initial segment of subject
which consists entirely of characters not in mask
.
PHP strcspn()
Working Examples
1. strcspn() example
<?php
$a = strcspn('abcd', 'apple');
$b = strcspn('abcd', 'banana');
$c = strcspn('hello', 'l');
$d = strcspn('hello', 'world');
$e = strcspn('abcdhelloabcd', 'abcd', -9);
$f = strcspn('abcdhelloabcd', 'abcd', -9, -5);
var_dump($a);
var_dump($b);
var_dump($c);
var_dump($d);
var_dump($e);
var_dump($f);
?>
Output of the above code:
int(0)
int(0)
int(2)
int(2)
int(5)
int(4)
Important Points about PHP strcspn()
Function
When a
start
parameter is set, the returned length is counted starting from this position, not from the beginning ofsubject
.
The PHP
function will give you a string with all NULL bytes, HTML and PHP tags stripped from a given strip_tags()
str
. It uses the same tag stripping state machine as the fgetss()
function.
strip_tags ( string $str [, string $allowable_tags ] ) : string
str
— The input string.allowable_tags
— You can use the optional second parameter to specify tags which should not be stripped.
The PHP strip_tags()
function returns the stripped string.
<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";
// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>
Output of the above code:
Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>
5.3.4 — strip_tags()
ignores self-closing XHTML tags in allowable_tags
.
HTML comments and PHP tags are also stripped. This is hardcoded and can not be changed with
allowable_tags
.In PHP 5.3.4 and later, self-closing XHTML tags are ignored and only non-self-closing tags should be used in
allowable_tags
. For example, to allow both <br> and <br/>, you should use:This function should not be used to try to prevent XSS attacks. Use more appropiate functions like
htmlspecialchars()
or other means depending on the context of the output.Because
strip_tags()
does not actually validate the HTML, partial or broken tags can result in the removal of more text/data than expected.This function does not modify any attributes on the tags that you allow using
allowable_tags
, including the style and onmouseover attributes that a mischievous user may abuse when posting text that will be shown to other users.Tag names within the input HTML that are greater than 1023 bytes in length will be treated as though they are invalid, regardless of the
allowable_tags
parameter.
<?php
strip_tags($input, '<br>');
?>
Additional Tips from Fellow Developers
Contributed By: mariusz.tarnaski
Hi. I made a function that removes the HTML tags along with their contents:
Function:
<?php
function strip_tags_content($text, $tags = '', $invert = FALSE) {
preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags);
$tags = array_unique($tags[1]);
if(is_array($tags) AND count($tags) > 0) {
if($invert == FALSE) {
return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text);
}
else {
return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text);
}
}
elseif($invert == FALSE) {
return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
}
return $text;
}
?>
Sample text:
$text = '<b>sample</b> text with <div>tags</div>';
Result for strip_tags($text):
sample text with tags
Result for strip_tags_content($text):
text with
Result for strip_tags_content($text, '<b>'):
<b>sample</b> text with
Result for strip_tags_content($text, '<b>', TRUE);
text with <div>tags</div>
I hope that someone is useful :)
Contributed By: doug
"5.3.4 strip_tags() no longer strips self-closing XHTML tags unless the self-closing XHTML tag is also given in allowable_tags."
This is poorly worded.
The above seems to be saying that, since 5.3.4, if you don't specify "<br/>" in allowable_tags then "<br/>" will not be stripped... but that's not actually what they're trying to say.
What it means is, in versions prior to 5.3.4, it "strips self-closing XHTML tags unless the self-closing XHTML tag is also given in allowable_tags", and that since 5.3.4 this is no longer the case.
So what reads as "no longer strips self-closing tags (unless the self-closing XHTML tag is also given in allowable_tags)" is actually saying "no longer (strips self-closing tags unless the self-closing XHTML tag is also given in allowable_tags)".
i.e.
pre-5.3.4: strip_tags('Hello World<br><br/>','<br>') => 'Hello World<br>' // strips <br/> because it wasn't explicitly specified in allowable_tags
5.3.4 and later: strip_tags('Hello World<br><br/>','<br>') => 'Hello World<br><br/>' // does not strip <br/> because PHP matches it with <br> in allowable_tags
Contributed By: stever
Since strip_tags does not remove attributes and thus creates a potential XSS security hole, here is a small function I wrote to allow only specific tags with specific attributes and strip all other tags and attributes.
If you only allow formatting tags such as b, i, and p, and styling attributes such as class, id and style, this will strip all javascript including event triggers in formatting tags.
Note that allowing anchor tags or href attributes opens another potential security hole that this solution won't protect against. You'll need more comprehensive protection if you plan to allow links in your text.
<?php
function stripUnwantedTagsAndAttrs($html_str){
$xml = new DOMDocument();
//Suppress warnings: proper error handling is beyond scope of example
libxml_use_internal_errors(true);
//List the tags you want to allow here, NOTE you MUST allow html and body otherwise entire string will be cleared
$allowed_tags = array("html", "body", "b", "br", "em", "hr", "i", "li", "ol", "p", "s", "span", "table", "tr", "td", "u", "ul");
//List the attributes you want to allow here
$allowed_attrs = array ("class", "id", "style");
if (!strlen($html_str)){return false;}
if ($xml->loadHTML($html_str, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD)){
foreach ($xml->getElementsByTagName("*") as $tag){
if (!in_array($tag->tagName, $allowed_tags)){
$tag->parentNode->removeChild($tag);
}else{
foreach ($tag->attributes as $attr){
if (!in_array($attr->nodeName, $allowed_attrs)){
$tag->removeAttribute($attr->nodeName);
}
}
}
}
}
return $xml->saveHTML();
}
?>
Contributed By: bzplan
A HTML code like this:
<?php
$html = '
<div>
<p style="color:blue;">color is blue</p><p>size is <span style="font-size:200%;">huge</span></p>
<p>material is wood</p>
</div>
';
?>
with <?php $str = strip_tags($html); ?>
... the result is:
$str = 'color is bluesize is huge
material is wood';
notice: the words 'blue' and 'size' grow together :(
and line-breaks are still in new string $str
if you need a space between the words (and without line-break)
use my function: <?php $str = rip_tags($html); ?>
... the result is:
$str = 'color is blue size is huge material is wood';
the function:
<?php
// --------------------------------------------------------------
function rip_tags($string) {
// ----- remove HTML TAGs -----
$string = preg_replace ('/<[^>]*>/', ' ', $string);
// ----- remove control characters -----
$string = str_replace("\r", '', $string); // --- replace with empty space
$string = str_replace("\n", ' ', $string); // --- replace with space
$string = str_replace("\t", ' ', $string); // --- replace with space
// ----- remove multiple spaces -----
$string = trim(preg_replace('/ {2,}/', ' ', $string));
return $string;
}
// --------------------------------------------------------------
?>
the KEY is the regex pattern: '/<[^>]*>/'
instead of strip_tags()
... then remove control characters and multiple spaces
:)
Contributed By: CEO
Note the different outputs from different versions of the same tag:
<?php // striptags.php
$data = '<br>Each<br/>New<br />Line';
$new = strip_tags($data, '<br>');
var_dump($new); // OUTPUTS string(21) "<br>EachNew<br />Line"
<?php // striptags.php
$data = '<br>Each<br/>New<br />Line';
$new = strip_tags($data, '<br/>');
var_dump($new); // OUTPUTS string(16) "Each<br/>NewLine"
<?php // striptags.php
$data = '<br>Each<br/>New<br />Line';
$new = strip_tags($data, '<br />');
var_dump($new); // OUTPUTS string(11) "EachNewLine"
?>
Contributed By:
Features:
* allowable tags (as in strip_tags),
* optional stripping attributes of the allowable tags,
* optional comment preserving,
* deleting broken and unclosed tags and comments,
* optional callback function call for every piece processed allowing for flexible replacements.
<?php
function better_strip_tags( $str, $allowable_tags = '', $strip_attrs = false, $preserve_comments = false, callable $callback = null ) {
$allowable_tags = array_map( 'strtolower', array_filter( // lowercase
preg_split( '/(?:>|^)\\s*(?:<|$)/', $allowable_tags, -1, PREG_SPLIT_NO_EMPTY ), // get tag names
function( $tag ) { return preg_match( '/^[a-z][a-z0-9_]*$/i', $tag ); } // filter broken
) );
$comments_and_stuff = preg_split( '/(<!--.*?(?:-->|$))/', $str, -1, PREG_SPLIT_DELIM_CAPTURE );
foreach ( $comments_and_stuff as $i => $comment_or_stuff ) {
if ( $i % 2 ) { // html comment
if ( !( $preserve_comments && preg_match( '/<!--.*?-->/', $comment_or_stuff ) ) ) {
$comments_and_stuff[$i] = '';
}
} else { // stuff between comments
$tags_and_text = preg_split( "/(<(?:[^>\"']++|\"[^\"]*+(?:\"|$)|'[^']*+(?:'|$))*(?:>|$))/", $comment_or_stuff, -1, PREG_SPLIT_DELIM_CAPTURE );
foreach ( $tags_and_text as $j => $tag_or_text ) {
$is_broken = false;
$is_allowable = true;
$result = $tag_or_text;
if ( $j % 2 ) { // tag
if ( preg_match( "%^(</?)([a-z][a-z0-9_]*)\\b(?:[^>\"'/]++|/+?|\"[^\"]*\"|'[^']*')*?(/?>)%i", $tag_or_text, $matches ) ) {
$tag = strtolower( $matches[2] );
if ( in_array( $tag, $allowable_tags ) ) {
if ( $strip_attrs ) {
$opening = $matches[1];
$closing = ( $opening === '</' ) ? '>' : $closing;
$result = $opening . $tag . $closing;
}
} else {
$is_allowable = false;
$result = '';
}
} else {
$is_broken = true;
$result = '';
}
} else { // text
$tag = false;
}
if ( !$is_broken && isset( $callback ) ) {
// allow result modification
call_user_func_array( $callback, array( &$result, $tag_or_text, $tag, $is_allowable ) );
}
$tags_and_text[$j] = $result;
}
$comments_and_stuff[$i] = implode( '', $tags_and_text );
}
}
$str = implode( '', $comments_and_stuff );
return $str;
}
?>
Callback arguments:
* &$result: contains text to be placed insted of original piece (e.g. empty string for forbidden tags), it can be changed;
* $tag_or_text: original piece of text or a tag (see below);
* $tag: false for text between tags, lowercase tag name for tags;
* $is_allowable: boolean telling if a tag isn't allowed (to avoid double checking), always true for text between tags
Callback function isn't called for comments and broken tags.
Caution: the function doesn't fully validate tags (the more so HTML itself), it just force strips those obviously broken (in addition to stripping forbidden tags). If you want to get valid tags then use strip_attrs option, though it doesn't guarantee tags are balanced or used in the appropriate context. For complex logic consider using DOM parser.
PHP stripcslashes()
Function
What does stripcslashes()
do?
The PHP
function will un-quote string quoted with stripcslashes()
addcslashes()
.
PHP stripcslashes()
Syntax
stripcslashes ( string $str ) : string
PHP stripcslashes()
Parameters
str
— The string to be unescaped.
PHP stripcslashes()
Return Value
The PHP stripcslashes()
function returns the unescaped string.
PHP stripos()
Function
What does stripos()
do?
The PHP
function will find the position of the first occurrence of a case-insensitive substring in a string.stripos()
PHP stripos()
Syntax
stripos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
PHP stripos()
Parameters
haystack
— The string to search in.needle
— Note that the needle may be a string of one or more characters.offset
— If specified, search will start this number of characters counted from the beginning of the string. If the offset is negative, the search will start this number of characters counted from the end of the string.
PHP stripos()
Return Value
The PHP stripos()
function returns the position of where the needle exists relative to the beginnning of the haystack
string (independent of offset). Also note that string positions start at 0, and not 1.
PHP stripos()
Working Examples
1. stripos() examples
<?php
$findme = 'a';
$mystring1 = 'xyz';
$mystring2 = 'ABC';
$pos1 = stripos($mystring1, $findme);
$pos2 = stripos($mystring2, $findme);
// Nope, 'a' is certainly not in 'xyz'
if ($pos1 === false) {
echo "The string '$findme' was not found in the string '$mystring1'";
}
// Note our use of ===. Simply == would not work as expected
// because the position of 'a' is the 0th (first) character.
if ($pos2 !== false) {
echo "We found '$findme' in '$mystring2' at position $pos2";
}
?>
Changelog for PHP stripos() Function
7.1.0 — Support for negative offset
s has been added.
Important Points about PHP stripos()
Function
This function may return Boolean
FALSE
, but may also return a non-Boolean value which evaluates toFALSE
. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
Additional Tips from Fellow Developers
Contributed By: emperorshishire
I found myself needing to find the first position of multiple needles in one haystack. So I wrote this little function:
<?php
function multineedle_stripos($haystack, $needles, $offset=0) {
foreach($needles as $needle) {
$found[$needle] = stripos($haystack, $needle, $offset);
}
return $found;
}
// It works as such:
$haystack = "The quick brown fox jumps over the lazy dog.";
$needle = array("fox", "dog", ".", "duck")
var_dump(multineedle_stripos($haystack, $needle));
/* Output:
array(3) {
["fox"]=>
int(16)
["dog"]=>
int(40)
["."]=>
int(43)
["duck"]=>
bool(false)
}
*/
?>
PHP stripslashes()
Function
What does stripslashes()
do?
The PHP
function will un-quotes a quoted string.stripslashes()
PHP stripslashes()
Syntax
stripslashes ( string $str ) : string
PHP stripslashes()
Parameters
str
— The input string.
PHP stripslashes()
Return Value
The PHP stripslashes()
function returns a string with backslashes stripped off. (\’ becomes ‘ and so on.) Double backslashes (\\) are made into a single backslash (\).
PHP stripslashes()
Working Examples
1. A stripslashes() example
<?php
$str = "Is your name O\'reilly?";
// Outputs: Is your name O'reilly?
echo stripslashes($str);
?>
2. Using stripslashes() on an array
<?php
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
// Example
$array = array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar"));
$array = stripslashes_deep($array);
// Output
print_r($array);
?>
Output of the above code:
Array
(
[0] => f'oo
[1] => b'ar
[2] => Array
(
[0] => fo'o
[1] => b'ar
)
)
Important Points about PHP stripslashes()
Function
If magic_quotes_sybase is on, no backslashes are stripped off but two apostrophes are replaced by one instead.
stripslashes()
is not recursive. If you want to apply this function to a multi-dimensional array, you need to use a recursive function.
Additional Tips from Fellow Developers
Contributed By: ivijan dot stefan
Sometimes for some reason is happens that PHP or Javascript or some naughty insert a lot of backslash. Ordinary function does not notice that. Therefore, it is necessary that the bit "inflate":
<?php
function removeslashes($string)
{
$string=implode("",explode("\\",$string));
return stripslashes(trim($string));
}
/* Example */
$text="My dog don\\\\\\\\\\\\\\\\'t like the postman!";
echo removeslashes($text);
?>
RESULT: My dog don't like the postman!
This flick has served me wery well, because I had this problem before.
PHP stristr()
Function
What does stristr()
do?
The PHP
function will give you all of stristr()
haystack
starting from and including the first occurrence of needle
to the end.
PHP stristr()
Syntax
stristr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] ) : string
PHP stristr()
Parameters
haystack
— The string to search inneedle
— If needle is not a string, it is converted to an integer and applied as the ordinal value of a character. This behavior is deprecated as of PHP 7.3.0, and relying on it is highly discouraged. Depending on the intended behavior, the needle should either be explicitly cast to string, or an explicit call tochr()
should be performed.before_needle
— If TRUE,stristr()
returns the part of the haystack before the first occurrence of the needle (excluding needle).
PHP stristr()
Return Value
The PHP stristr()
function returns the matched substring. If needle
is not found, return FALSE
.
PHP stristr()
Working Examples
1. stristr() example
<?php
$email = 'USER@EXAMPLE.com';
echo stristr($email, 'e'); // outputs ER@EXAMPLE.com
echo stristr($email, 'e', true); // As of PHP 5.3.0, outputs US
?>
2. Testing if a string is found or not
<?php
$string = 'Hello World!';
if(stristr($string, 'earth') === FALSE) {
echo '"earth" not found in string';
}
// outputs: "earth" not found in string
?>
3. Using a non “string” needle
<?php
$string = 'APPLE';
echo stristr($string, 97); // 97 = lowercase a
// outputs: APPLE
?>
Changelog for PHP stristr() Function
5.3.0 — Added the optional parameter before_needle
.
Additional Tips from Fellow Developers
Contributed By:
There was a change in PHP 4.2.3 that can cause a warning message
to be generated when using stristr(), even though no message was
generated in older versions of PHP.
The following will generate a warning message in 4.0.6 and 4.2.3:
stristr("haystack", "");
OR
$needle = ""; stristr("haystack", $needle);
This will _not_ generate an "Empty Delimiter" warning message in
4.0.6, but _will_ in 4.2.3:
unset($needle); stristr("haystack", $needle);
Here's a URL that documents what was changed:
http://groups.google.ca/groups?selm=cvshholzgra1031224321%40cvsserver
PHP strlen()
Function
What does strlen()
do?
The PHP
function will give you the length of the given strlen()
string
.
PHP strlen()
Syntax
strlen ( string $string ) : int
PHP strlen()
Parameters
string
— The string being measured for length.
PHP strlen()
Return Value
The PHP strlen()
function returns the length of the string
on success, and 0 if the string
is empty.
PHP strlen()
Working Examples
1. A strlen() example
<?php
$str = 'abcdef';
echo strlen($str); // 6
$str = ' ab cd ';
echo strlen($str); // 7
?>
Changelog for PHP strlen() Function
5.3.0 — Prior versions treated arrays as the string Array, thus returning a string length of 5 and emitting an E_NOTICE
level error.
Important Points about PHP strlen()
Function
strlen()
returns the number of bytes rather than the number of characters in a string.strlen()
returnsNULL
when executed on arrays, and anE_WARNING
level error is emitted.
Additional Tips from Fellow Developers
Contributed By: rm dot nasir
I want to share something seriously important for newbies or beginners of PHP who plays with strings of UTF8 encoded characters or the languages like: Arabic, Persian, Pashto, Dari, Chinese (simplified), Chinese (traditional), Japanese, Vietnamese, Urdu, Macedonian, Lithuanian, and etc.
As the manual says: "strlen() returns the number of bytes rather than the number of characters in a string.", so if you want to get the number of characters in a string of UTF8 so use mb_strlen() instead of strlen().
Example:
<?php
// the Arabic (Hello) string below is: 59 bytes and 32 characters
$utf8 = "السلام علیکم ورحمة الله وبرکاته!";
var_export( strlen($utf8) ); // 59
echo "<br>";
var_export( mb_strlen($utf8, 'utf8') ); // 32
?>
Contributed By: chernyshevsky
The easiest way to determine the character count of a UTF8 string is to pass the text through utf8_decode() first:
<?php
$length = strlen(utf8_decode($s));
?>
utf8_decode() converts characters that are not in ISO-8859-1 to '?', which, for the purpose of counting, is quite alright.
Contributed By: basil
We just ran into what we thought was a bug but turned out to be a documented difference in behavior between PHP 5.2 & 5.3. Take the following code example:
<?php
$attributes = array('one', 'two', 'three');
if (strlen($attributes) == 0 && !is_bool($attributes)) {
echo "We are in the 'if'\n"; // PHP 5.3
} else {
echo "We are in the 'else'\n"; // PHP 5.2
}
?>
This is because in 5.2 strlen will automatically cast anything passed to it as a string, and casting an array to a string yields the string "Array". In 5.3, this changed, as noted in the following point in the backward incompatible changes in 5.3 (http://www.php.net/manual/en/migration53.incompatible.php):
"The newer internal parameter parsing API has been applied across all the extensions bundled with PHP 5.3.x. This parameter parsing API causes functions to return NULL when passed incompatible parameters. There are some exceptions to this rule, such as the get_class() function, which will continue to return FALSE on error."
So, in PHP 5.3, strlen($attributes) returns NULL, while in PHP 5.2, strlen($attributes) returns the integer 5. This likely affects other functions, so if you are getting different behaviors or new bugs suddenly, check if you have upgraded to 5.3 (which we did recently), and then check for some warnings in your logs like this:
strlen() expects parameter 1 to be string, array given in /var/www/sis/lib/functions/advanced_search_lib.php on line 1028
If so, then you are likely experiencing this changed behavior.
Contributed By: vcardillo
I would like to demonstrate that you need more than just this function in order to truly test for an empty string. The reason being that <?php strlen(null); ?> will return 0. So how do you know if the value was null, or truly an empty string?
<?php
$foo = null;
$len = strlen(null);
$bar = '';
echo "Length: " . strlen($foo) . "<br>";
echo "Length: $len <br>";
echo "Length: " . strlen(null) . "<br>";
if (strlen($foo) === 0) echo 'Null length is Zero <br>';
if ($len === 0) echo 'Null length is still Zero <br>';
if (strlen($foo) == 0 && !is_null($foo)) echo '!is_null(): $foo is truly an empty string <br>';
else echo '!is_null(): $foo is probably null <br>';
if (strlen($foo) == 0 && isset($foo)) echo 'isset(): $foo is truly an empty string <br>';
else echo 'isset(): $foo is probably null <br>';
if (strlen($bar) == 0 && !is_null($bar)) echo '!is_null(): $bar is truly an empty string <br>';
else echo '!is_null(): $foo is probably null <br>';
if (strlen($bar) == 0 && isset($bar)) echo 'isset(): $bar is truly an empty string <br>';
else echo 'isset(): $foo is probably null <br>';
?>
// Begin Output:
Length: 0
Length: 0
Length: 0
Null length is Zero
Null length is still Zero
!is_null(): $foo is probably null
isset(): $foo is probably null
!is_null(): $bar is truly an empty string
isset(): $bar is truly an empty string
// End Output
So it would seem you need either is_null() or isset() in addition to strlen() if you care whether or not the original value was null.
Contributed By: jasonrohrer
PHP's strlen function behaves differently than the C strlen function in terms of its handling of null bytes ('\0').
In PHP, a null byte in a string does NOT count as the end of the string, and any null bytes are included in the length of the string.
For example, in PHP:
strlen( "te\0st" ) = 5
In C, the same call would return 2.
Thus, PHP's strlen function can be used to find the number of bytes in a binary string (for example, binary data returned by base64_decode).
Contributed By: tux
Attention with utf8:
$foo = "bär";
strlen($foo) will return 4 and not 3 as expected..
PHP strnatcasecmp()
Function
What does strnatcasecmp()
do?
The PHP
function will case insensitive string comparisons using a “natural order” algorithm.strnatcasecmp()
PHP strnatcasecmp()
Syntax
strnatcasecmp ( string $str1 , string $str2 ) : int
PHP strnatcasecmp()
Parameters
str1
— The first string.str2
— The second string.
PHP strnatcasecmp()
Return Value
The PHP strnatcasecmp()
function returns < 0 if str1
is less than str2
> 0 if str1
is greater than str2
, and 0 if they are equal.
PHP strnatcmp()
Function
What does strnatcmp()
do?
The PHP
function will string comparisons using a “natural order” algorithm.strnatcmp()
PHP strnatcmp()
Syntax
strnatcmp ( string $str1 , string $str2 ) : int
PHP strnatcmp()
Parameters
str1
— The first string.str2
— The second string.
PHP strnatcmp()
Return Value
The PHP strnatcmp()
function returns < 0 if str1
is less than str2
; > 0 if str1
is greater than str2
, and 0 if they are equal.
PHP strncasecmp()
Function
What does strncasecmp()
do?
The PHP
function will binary safe case-insensitive string comparison of the first n characters.strncasecmp()
PHP strncasecmp()
Syntax
strncasecmp ( string $str1 , string $str2 , int $len ) : int
PHP strncasecmp()
Parameters
str1
— The first string.str2
— The second string.len
— The length of strings to be used in the comparison.
PHP strncasecmp()
Return Value
The PHP strncasecmp()
function returns < 0 if str1
is less than str2
; > 0 if str1
is greater than str2
, and 0 if they are equal.
PHP strncmp()
Function
What does strncmp()
do?
The PHP
function will binary safe string comparison of the first n characters.strncmp()
PHP strncmp()
Syntax
strncmp ( string $str1 , string $str2 , int $len ) : int
PHP strncmp()
Parameters
str1
— The first string.str2
— The second string.len
— Number of characters to use in the comparison.
PHP strncmp()
Return Value
The PHP strncmp()
function returns < 0 if str1
is less than str2
; > 0 if str1
is greater than str2
, and 0 if they are equal.
PHP strpbrk()
Function
What does strpbrk()
do?
The PHP
function will search a string for any of a set of characters.strpbrk()
PHP strpbrk()
Syntax
strpbrk ( string $haystack , string $char_list ) : string
PHP strpbrk()
Parameters
haystack
— The string where char_list is looked for.char_list
— This parameter is case sensitive.
PHP strpbrk()
Return Value
The PHP strpbrk()
function returns a string starting from the character found, or FALSE
if it is not found.
PHP strpbrk()
Working Examples
1. strpbrk() example
<?php
$text = 'This is a Simple text.';
// this echoes "is is a Simple text." because 'i' is matched first
echo strpbrk($text, 'mi');
// this echoes "Simple text." because chars are case sensitive
echo strpbrk($text, 'S');
?>
Additional Tips from Fellow Developers
Contributed By: devnuhl
If you're not looking to duplicate the rest of the string, but instead just want the offset, in the spirit of the str*pos() functions, use strcspn()
PHP strpos()
Function
What does strpos()
do?
The PHP
function will find the position of the first occurrence of a substring in a string.strpos()
PHP strpos()
Syntax
strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
PHP strpos()
Parameters
haystack
— The string to search in.needle
— If needle is not a string, it is converted to an integer and applied as the ordinal value of a character. This behavior is deprecated as of PHP 7.3.0, and relying on it is highly discouraged. Depending on the intended behavior, the needle should either be explicitly cast to string, or an explicit call tochr()
should be performed.offset
— If specified, search will start this number of characters counted from the beginning of the string. If the offset is negative, the search will start this number of characters counted from the end of the string.
PHP strpos()
Return Value
The PHP strpos()
function returns the position of where the needle exists relative to the beginning of the haystack
string (independent of offset). Also note that string positions start at 0, and not 1.
PHP strpos()
Working Examples
1. Using ===
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// Note our use of ===. Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($pos === false) {
echo "The string '$findme' was not found in the string '$mystring'";
} else {
echo "The string '$findme' was found in the string '$mystring'";
echo " and exists at position $pos";
}
?>
2. Using !==
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// The !== operator can also be used. Using != would not work as expected
// because the position of 'a' is 0. The statement (0 != false) evaluates
// to false.
if ($pos !== false) {
echo "The string '$findme' was found in the string '$mystring'";
echo " and exists at position $pos";
} else {
echo "The string '$findme' was not found in the string '$mystring'";
}
?>
3. Using an offset
<?php
// We can search for the character, ignoring anything before the offset
$newstring = 'abcdef abcdef';
$pos = strpos($newstring, 'a', 1); // $pos = 7, not 0
?>
Changelog for PHP strpos() Function
7.1.0 — Support for negative offset
s has been added.
Important Points about PHP strpos()
Function
This function may return Boolean
FALSE
, but may also return a non-Boolean value which evaluates toFALSE
. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
Additional Tips from Fellow Developers
Contributed By: Suggested re-write for pink WARNING box
WARNING
As strpos may return either FALSE (substring absent) or 0 (substring at start of string), strict versus loose equivalency operators must be used very carefully.
To know that a substring is absent, you must use:
=== FALSE
To know that a substring is present (in any position including 0), you can use either of:
!== FALSE (recommended)
> -1 (note: or greater than any negative number)
To know that a substring is at the start of the string, you must use:
=== 0
To know that a substring is in any position other than the start, you can use any of:
> 0 (recommended)
!= 0 (note: but not !== 0 which also equates to FALSE)
!= FALSE (disrecommended as highly confusing)
Also note that you cannot compare a value of "" to the returned value of strpos. With a loose equivalence operator (== or !=) it will return results which don't distinguish between the substring's presence versus position. With a strict equivalence operator (=== or !==) it will always return false.
Contributed By: martijn
This is a function I wrote to find all occurrences of a string, using strpos recursively.
<?php
function strpos_recursive($haystack, $needle, $offset = 0, &$results = array()) {
$offset = strpos($haystack, $needle, $offset);
if($offset === false) {
return $results;
} else {
$results[] = $offset;
return strpos_recursive($haystack, $needle, ($offset + 1), $results);
}
}
?>
This is how you use it:
<?php
$string = 'This is some string';
$search = 'a';
$found = strpos_recursive($string, $search);
if($found) {
foreach($found as $pos) {
echo 'Found "'.$search.'" in string "'.$string.'" at position <b>'.$pos.'</b><br />';
}
} else {
echo '"'.$search.'" not found in "'.$string.'"';
}
?>
Contributed By: fabio
It is interesting to be aware of the behavior when the treatment of strings with characters using different encodings.
<?php
# Works like expected. There is no accent
var_dump(strpos("Fabio", 'b'));
#int(2)
# The "á" letter is occupying two positions
var_dump(strpos("Fábio", 'b')) ;
#int(3)
# Now, encoding the string "Fábio" to utf8, we get some "unexpected" outputs. Every letter that is no in regular ASCII table, will use 4 positions(bytes). The starting point remains like before.
# We cant find the characted, because the haystack string is now encoded.
var_dump(strpos(utf8_encode("Fábio"), 'á'));
#bool(false)
# To get the expected result, we need to encode the needle too
var_dump(strpos(utf8_encode("Fábio"), utf8_encode('á')));
#int(1)
# And, like said before, "á" occupies 4 positions(bytes)
var_dump(strpos(utf8_encode("Fábio"), 'b'));
#int(5)
Contributed By: mtroy dot student
When you want to know how much of substring occurrences, you'll use "substr_count".
But, retrieve their positions, will be harder.
So, you can do it by starting with the last occurrence :
function strpos_r($haystack, $needle)
{
if(strlen($needle) > strlen($haystack))
trigger_error(sprintf("%s: length of argument 2 must be <= argument 1", __FUNCTION__), E_USER_WARNING);
$seeks = array();
while($seek = strrpos($haystack, $needle))
{
array_push($seeks, $seek);
$haystack = substr($haystack, 0, $seek);
}
return $seeks;
}
it will return an array of all occurrences a the substring in the string
Example :
$test = "this is a test for testing a test function... blah blah";
var_dump(strpos_r($test, "test"));
// output
array(3) {
[0]=>
int(29)
[1]=>
int(19)
[2]=>
int(10)
}
Paul-antoine
Malézieux.
Contributed By: rjeggens
I lost an hour before I noticed that strpos only returns FALSE as a boolean, never TRUE.. This means that
strpos() !== false
is a different beast then:
strpos() === true
since the latter will never be true. After I found out, The warning in the documentation made a lot more sense.
Contributed By: akarmenia
My version of strpos with needles as an array. Also allows for a string, or an array inside an array.
<?php
function strpos_array($haystack, $needles) {
if ( is_array($needles) ) {
foreach ($needles as $str) {
if ( is_array($str) ) {
$pos = strpos_array($haystack, $str);
} else {
$pos = strpos($haystack, $str);
}
if ($pos !== FALSE) {
return $pos;
}
}
} else {
return strpos($haystack, $needles);
}
}
// Test
echo strpos_array('This is a test', array('test', 'drive')); // Output is 10
?>
PHP strrchr()
Function
What does strrchr()
do?
The PHP
function will find the last occurrence of a character in a string.strrchr()
PHP strrchr()
Syntax
strrchr ( string $haystack , mixed $needle ) : string
PHP strrchr()
Parameters
haystack
— The string to search inneedle
— If needle contains more than one character, only the first is used. This behavior is different from that ofstrstr()
.
PHP strrchr()
Return Value
The PHP strrchr()
function returns the portion of string, or FALSE
if needle
is not found.
PHP strrchr()
Working Examples
1. strrchr() example
<?php
// get last directory in $PATH
$dir = substr(strrchr($PATH, ":"), 1);
// get everything after last newline
$text = "Line 1\nLine 2\nLine 3";
$last = substr(strrchr($text, 10), 1 );
?>
Additional Tips from Fellow Developers
Contributed By: jphansen
To extract your portion of a string without the actual character you searched for, you can use:
<?php
$path = '/www/public_html/index.html';
$filename = substr(strrchr($path, "/"), 1);
echo $filename; // "index.html"
?>
Contributed By: matthewkastor
<?php
/**
* Removes the preceeding or proceeding portion of a string
* relative to the last occurrence of the specified character.
* The character selected may be retained or discarded.
*
* Example usage:
* <code>
* $example = 'http://example.com/path/file.php';
* $cwd_relative[] = cut_string_using_last('/', $example, 'left', true);
* $cwd_relative[] = cut_string_using_last('/', $example, 'left', false);
* $cwd_relative[] = cut_string_using_last('/', $example, 'right', true);
* $cwd_relative[] = cut_string_using_last('/', $example, 'right', false);
* foreach($cwd_relative as $string) {
* echo "$string <br>".PHP_EOL;
* }
* </code>
*
* Outputs:
* <code>
* http://example.com/path/
* http://example.com/path
* /file.php
* file.php
* </code>
*
* @param string $character the character to search for.
* @param string $string the string to search through.
* @param string $side determines whether text to the left or the right of the character is returned.
* Options are: left, or right.
* @param bool $keep_character determines whether or not to keep the character.
* Options are: true, or false.
* @return string
*/
function cut_string_using_last($character, $string, $side, $keep_character=true) {
$offset = ($keep_character ? 1 : 0);
$whole_length = strlen($string);
$right_length = (strlen(strrchr($string, $character)) - 1);
$left_length = ($whole_length - $right_length - 1);
switch($side) {
case 'left':
$piece = substr($string, 0, ($left_length + $offset));
break;
case 'right':
$start = (0 - ($right_length + $offset));
$piece = substr($string, $start);
break;
default:
$piece = false;
break;
}
return($piece);
}
?>
PHP strrev()
Function
What does strrev()
do?
The PHP
function will give you strrev()
string
, reversed.
PHP strrev()
Syntax
strrev ( string $string ) : string
PHP strrev()
Parameters
string
— The string to be reversed.
PHP strrev()
Return Value
The PHP strrev()
function returns the reversed string.
PHP strrev()
Working Examples
1. Reversing a string with strrev()
<?php
echo strrev("Hello world!"); // outputs "!dlrow olleH"
?>
PHP strripos()
Function
What does strripos()
do?
The PHP
function will find the position of the last occurrence of a case-insensitive substring in a string.strripos()
PHP strripos()
Syntax
strripos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
PHP strripos()
Parameters
haystack
— The string to search in.needle
— If needle is not a string, it is converted to an integer and applied as the ordinal value of a character. This behavior is deprecated as of PHP 7.3.0, and relying on it is highly discouraged. Depending on the intended behavior, the needle should either be explicitly cast to string, or an explicit call tochr()
should be performed.offset
— If zero or positive, the search is performed left to right skipping the first offset bytes of the haystack.
PHP strripos()
Return Value
The PHP strripos()
function returns the position where the needle exists relative to the beginnning of the haystack
string (independent of search direction or offset).
PHP strripos()
Working Examples
1. A simple strripos() example
<?php
$haystack = 'ababcd';
$needle = 'aB';
$pos = strripos($haystack, $needle);
if ($pos === false) {
echo "Sorry, we did not find ($needle) in ($haystack)";
} else {
echo "Congratulations!\n";
echo "We found the last ($needle) in ($haystack) at position ($pos)";
}
?>
Output of the above code:
Congratulations!
We found the last (aB) in (ababcd) at position (2)
Important Points about PHP strripos()
Function
This is effectively looking for the last occurrence of
needle
before the lastoffset
bytes.This function may return Boolean
FALSE
, but may also return a non-Boolean value which evaluates toFALSE
. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
PHP strrpos()
Function
What does strrpos()
do?
The PHP
function will find the position of the last occurrence of a substring in a string.strrpos()
PHP strrpos()
Syntax
strrpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
PHP strrpos()
Parameters
haystack
— The string to search in.needle
— If needle is not a string, it is converted to an integer and applied as the ordinal value of a character. This behavior is deprecated as of PHP 7.3.0, and relying on it is highly discouraged. Depending on the intended behavior, the needle should either be explicitly cast to string, or an explicit call tochr()
should be performed.offset
— If zero or positive, the search is performed left to right skipping the first offset bytes of the haystack.
PHP strrpos()
Return Value
The PHP strrpos()
function returns the position where the needle exists relative to the beginning of the haystack
string (independent of search direction or offset).
PHP strrpos()
Working Examples
1. Checking if a needle is in the haystack
<?php
$pos = strrpos($mystring, "b");
if ($pos === false) { // note: three equal signs
// not found...
}
?>
2. Searching with offsets
<?php
$foo = "0123456789a123456789b123456789c";
// Looking for '0' from the 0th byte (from the beginning)
var_dump(strrpos($foo, '0', 0));
// Looking for '0' from the 1st byte (after byte "0")
var_dump(strrpos($foo, '0', 1));
// Looking for '7' from the 21th byte (after byte 20)
var_dump(strrpos($foo, '7', 20));
// Looking for '7' from the 29th byte (after byte 28)
var_dump(strrpos($foo, '7', 28));
// Looking for '7' right to left from the 5th byte from the end
var_dump(strrpos($foo, '7', -5));
// Looking for 'c' right to left from the 2nd byte from the end
var_dump(strrpos($foo, 'c', -2));
// Looking for '9c' right to left from the 2nd byte from the end
var_dump(strrpos($foo, '9c', -2));
?>
Output of the above code:
int(0)
bool(false)
int(27)
bool(false)
int(17)
bool(false)
int(29)
Important Points about PHP strrpos()
Function
This is effectively looking for the last occurrence of
needle
before the lastoffset
bytes.This function may return Boolean
FALSE
, but may also return a non-Boolean value which evaluates toFALSE
. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
Additional Tips from Fellow Developers
Contributed By: brian
The documentation for 'offset' is misleading.
It says, "offset may be specified to begin searching an arbitrary number of characters into the string. Negative values will stop searching at an arbitrary point prior to the end of the string."
This is confusing if you think of strrpos as starting at the end of the string and working backwards.
A better way to think of offset is:
- If offset is positive, then strrpos only operates on the part of the string from offset to the end. This will usually have the same results as not specifying an offset, unless the only occurences of needle are before offset (in which case specifying the offset won't find the needle).
- If offset is negative, then strrpos only operates on that many characters at the end of the string. If the needle is farther away from the end of the string, it won't be found.
If, for example, you want to find the last space in a string before the 50th character, you'll need to do something like this:
strrpos($text, " ", -(strlen($text) - 50));
If instead you used strrpos($text, " ", 50), then you would find the last space between the 50th character and the end of the string, which may not have been what you were intending.
PHP strspn()
Function
What does strspn()
do?
The PHP
function will finds the length of the initial segment of a string consisting entirely of characters contained within a given mask .strspn()
PHP strspn()
Syntax
strspn ( string $subject , string $mask [, int $start [, int $length ]] ) : int
PHP strspn()
Parameters
subject
— The string to examine.mask
— The list of allowable characters.start
— The position in subject to start searching.length
— The length of the segment from subject to examine.
PHP strspn()
Return Value
The PHP strspn()
function returns the length of the initial segment of subject
which consists entirely of characters in mask
.
PHP strspn()
Working Examples
1. strspn() example
<?php
// subject does not start with any characters from mask
var_dump(strspn("foo", "o"));
// examine two characters from subject starting at offset 1
var_dump(strspn("foo", "o", 1, 2));
// examine one character from subject starting at offset 1
var_dump(strspn("foo", "o", 1, 1));
?>
Output of the above code:
int(0)
int(2)
int(1)
Important Points about PHP strspn()
Function
When a
start
parameter is set, the returned length is counted starting from this position, not from the beginning ofsubject
.
Additional Tips from Fellow Developers
Contributed By:
You can use this function with strlen to check illegal characters, string lenght must be the same than strspn (characters from my string contained in another)
<?php
$digits='0123456789';
if (strlen($phone) != strspn($phone,$digits))
echo "illegal characters";
?>
Contributed By: barry dot balkowski
It took me some time to understand the way this function works…
I’ve compiled my own explanation with my own words that is more understandable for me personally than the official one or those that can be found in different tutorials on the web.
Perhaps, it will save someone several minutes…
<?php
strspn(string $haystack, string $char_list [, int $start [, int $length]])
?>
The way it works:
- searches for a segment of $haystack that consists entirely from supplied through the second argument chars
- $haystack must start from one of the chars supplied through $char_list, otherwise the function will find nothing
- as soon as the function encounters a char that was not mentioned in $chars it understands that the segment is over and stops (it doesn’t search for the second, third and so on segments)
- finally, it measures the segment’s length and return it (i.e. length)
In other words it finds a span (only the first one) in the string that consists entirely form chars supplied in $chars_list and returns its length
PHP strstr()
Function
What does strstr()
do?
The PHP
function will give you part of strstr()
haystack
string starting from and including the first occurrence of needle
to the end of haystack
.
PHP strstr()
Syntax
strstr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] ) : string
PHP strstr()
Parameters
haystack
— The input string.needle
— If needle is not a string, it is converted to an integer and applied as the ordinal value of a character. This behavior is deprecated as of PHP 7.3.0, and relying on it is highly discouraged. Depending on the intended behavior, the needle should either be explicitly cast to string, or an explicit call tochr()
should be performed.before_needle
— If TRUE,strstr()
returns the part of the haystack before the first occurrence of the needle (excluding the needle).
PHP strstr()
Return Value
The PHP strstr()
function returns the portion of string, or FALSE
if needle
is not found.
PHP strstr()
Working Examples
1. strstr() example
<?php
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain; // prints @example.com
$user = strstr($email, '@', true); // As of PHP 5.3.0
echo $user; // prints name
?>
Changelog for PHP strstr() Function
5.3.0 — Added the optional parameter before_needle
.
Important Points about PHP strstr()
Function
This function is case-sensitive. For case-insensitive searches, use
stristr()
.If you only want to determine if a particular
needle
occurs withinhaystack
, use the faster and less memory intensive functionstrpos()
instead.
Additional Tips from Fellow Developers
Contributed By: laszlo dot heredy
Strstr() is not a way to avoid type-checking with strpos().
If $needle is the last character in $haystack, and testing $needle as a boolean by itself would evaluate to false, then testing strstr() as a boolean will evaluate to false (because, if successful, strstr() returns the first occurrence of $needle along with the rest of $haystack).
<?php
findZero('01234'); // found a zero
findZero('43210'); // did not find a zero
findZero('0'); // did not find a zero
findZero('00'); // found a zero
findZero('000'); // found a zero
findZero('10'); // did not find a zero
findZero('100'); // found a zero
function findZero($numberString) {
if (strstr($numberString, '0')) {
echo 'found a zero';
} else {
echo 'did not find a zero';
}
}
?>
Also, strstr() is far more memory-intensive than strpos(), especially with longer strings as your $haystack, so if you are not interested in the substring that strstr() returns, you shouldn't be using it anyway.
There is no PHP function just to check only _if_ $needle occurs in $haystack; strpos() tells you if it _doesn't_ by returning false, but, if it does occur, it tells you _where_ it occurs as an integer, which is 0 (zero) if $needle is the first part of $haystack, which is why testing if (strpos($needle, $haystack)===false) is the only way to know for sure if $needle is not part of $haystack.
My advice is to start loving type checking immediately, and to familiarize yourself with the return value of the functions you are using.
Cheers.
Contributed By: gruessle
Been using this for years:
<?php
/**
*
* @author : Dennis T Kaplan
*
* @version : 1.0
* Date : June 17, 2007
* Function : reverse strstr()
* Purpose : Returns part of haystack string from start to the first occurrence of needle
* $haystack = 'this/that/whatever';
* $result = rstrstr($haystack, '/')
* $result == this
*
* @access public
* @param string $haystack, string $needle
* @return string
**/
function rstrstr($haystack,$needle)
{
return substr($haystack, 0,strpos($haystack, $needle));
}
?>
You could change it to:
rstrstr ( string $haystack , mixed $needle [, int $start] )
<?php
function rstrstr($haystack,$needle, $start=0)
{
return substr($haystack, $start,strpos($haystack, $needle));
}
?>
PHP strtok()
Function
What does strtok()
do?
The PHP
function will strtok()
strtok()
splits a string (str
) into smaller strings (tokens), with each token being delimited by any character from token
. That is, if you have a string like “This is an example string” you could tokenize this string into its individual words by using the space character as the token.
PHP strtok()
Syntax
strtok ( string $str , string $token ) : string
strtok ( string $token ) : string
PHP strtok()
Parameters
str
— The string being split up into smaller strings (tokens).token
— The delimiter used when splitting up str.
PHP strtok()
Return Value
The PHP strtok()
function returns a string token.
PHP strtok()
Working Examples
1. strtok() example
<?php
$string = "This is\tan example\nstring";
/* Use tab and newline as tokenizing characters as well */
$tok = strtok($string, " \n\t");
while ($tok !== false) {
echo "Word=$tok<br />";
$tok = strtok(" \n\t");
}
?>
2. strtok() behavior on empty part found
<?php
$first_token = strtok('/something', '/');
$second_token = strtok('/');
var_dump($first_token, $second_token);
?>
Output of the above code:
string(9) "something"
bool(false)
Important Points about PHP strtok()
Function
This function may return Boolean
FALSE
, but may also return a non-Boolean value which evaluates toFALSE
. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
Additional Tips from Fellow Developers
Contributed By: eep2004
<?php
// strtok example
$str = 'Hello to all of Ukraine';
echo strtok($str, ' ').' '.strtok(' ').' '.strtok(' ');
?>
Result:
Hello to all
Contributed By: manicdepressive
<pre><?php
/** get leading, trailing, and embedded separator tokens that were 'skipped'
if for some ungodly reason you are using php to implement a simple parser that
needs to detect nested clauses as it builds a parse tree */
$str = "(((alpha(beta))(gamma))";
$seps = '()';
$tok = strtok( $str,$seps ); // return false on empty string or null
$cur = 0;
$dumbDone = FALSE;
$done = (FALSE===$tok);
while (!$done) {
// process skipped tokens (if any at first iteration) (special for last)
$posTok = $dumbDone ? strlen($str) : strpos($str, $tok, $cur );
$skippedMany = substr( $str, $cur, $posTok-$cur ); // false when 0 width
$lenSkipped = strlen($skippedMany); // 0 when false
if (0!==$lenSkipped) {
$last = strlen($skippedMany) -1;
for($i=0; $i<=$last; $i++){
$skipped = $skippedMany[$i];
$cur += strlen($skipped);
echo "skipped: $skipped\n";
}
}
if ($dumbDone) break; // this is the only place the loop is terminated
// process current tok
echo "curr tok: ".$tok."\n";
// update cursor
$cur += strlen($tok);
// get any next tok
if (!$dumbDone){
$tok = strtok($seps);
$dumbDone = (FALSE===$tok);
// you're not really done till you check for trailing skipped
}
};
?></pre>
PHP strtolower()
Function
What does strtolower()
do?
The PHP
function will give you strtolower()
string
with all alphabetic characters converted to lowercase.
PHP strtolower()
Syntax
strtolower ( string $string ) : string
PHP strtolower()
Parameters
string
— The input string.
PHP strtolower()
Return Value
The PHP strtolower()
function returns the lowercased string.
PHP strtolower()
Working Examples
1. strtolower() example
<?php
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtolower($str);
echo $str; // Prints mary had a little lamb and she loved it so
?>
Additional Tips from Fellow Developers
Contributed By: marcin
Strtolower(); doesn't work for polish chars
<?php strtolower("mĄkA"); ?>
will return: mĄka;
the best solution - use mb_strtolower()
<?php mb_strtolower("mĄkA",'UTF-8'); ?>
will return: mąka
Contributed By: coder
For cyrillic and UTF 8 use mb_convert_case
exampel
<?php
$string = "Австралия";
$string = mb_convert_case($string, MB_CASE_LOWER, "UTF-8");
echo $string;
//output is: австралия
?>
Contributed By: helvete
It is worth noting that
<?php
var_dump(strtolower(null))
?>
returns:
string(0) ""
Contributed By: dbers26
The function arraytolower will create duplicate entries since keys are case sensitive.
<?php
$array = array('test1' => 'asgAFasDAAd', 'TEST2' => 'ASddhshsDGb', 'TeSt3 '=> 'asdasda@asdadadASDASDgh');
$array = arraytolower($array);
?>
/*
Array
(
[test1] => asgafasdaad
[TEST2] => ASddhshsDGb
[TeSt3] => asdasda@asdadadASDASDgh
[test2] => asddhshsdgb
[test3] => asdasda@asdadadasdasdgh
)
*/
I prefer this method
<?php
function arraytolower($array, $include_leys=false) {
if($include_leys) {
foreach($array as $key => $value) {
if(is_array($value))
$array2[strtolower($key)] = arraytolower($value, $include_leys);
else
$array2[strtolower($key)] = strtolower($value);
}
$array = $array2;
}
else {
foreach($array as $key => $value) {
if(is_array($value))
$array[$key] = arraytolower($value, $include_leys);
else
$array[$key] = strtolower($value);
}
}
return $array;
}
?>
which when used like this
<?php
$array = $array = array('test1' => 'asgAFasDAAd', 'TEST2' => 'ASddhshsDGb', 'TeSt3 '=> 'asdasda@asdadadASDASDgh');
$array1 = arraytolower($array);
$array2 = arraytolower($array,true);
print_r($array1);
print_r($array2);
?>
will give output of
Array
(
[test1] => asgafasdaad
[TEST2] => asddhshsdgb
[TeSt3] => asdasda@asdadadasdasdgh
)
Array
(
[test1] => asgafasdaad
[test2] => asddhshsdgb
[test3] => asdasda@asdadadasdasdgh
)
PHP strtoupper()
Function
What does strtoupper()
do?
The PHP
function will give you strtoupper()
string
with all alphabetic characters converted to uppercase.
PHP strtoupper()
Syntax
strtoupper ( string $string ) : string
PHP strtoupper()
Parameters
string
— The input string.
PHP strtoupper()
Return Value
The PHP strtoupper()
function returns the uppercased string.
PHP strtoupper()
Working Examples
1. strtoupper() example
<?php
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtoupper($str);
echo $str; // Prints MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
?>
Additional Tips from Fellow Developers
Contributed By: andre
One might think that setting the correct locale would do the trick with for example german umlauts, but this is not the case. You have to use mb_strtoupper() instead:
<?php
setlocale(LC_CTYPE, 'de_DE.UTF8');
echo strtoupper('Umlaute äöü in uppercase'); // outputs "UMLAUTE äöü IN UPPERCASE"
echo mb_strtoupper('Umlaute äöü in uppercase', 'UTF-8'); // outputs "UMLAUTE ÄÖÜ IN UPPERCASE"
?>
Contributed By: mec
Something I myself first not thought about:
if there are any html entities (named entities) in your string, strtoupper will turn all letters within this entities to upper case, too. So if you want to manipulate a string with strtoupper it should contain only unicode entities (if ever).
PHP strtr()
Function
What does strtr()
do?
The PHP
function will translate characters or replace substrings.strtr()
PHP strtr()
Syntax
strtr ( string $str , string $from , string $to ) : string
strtr ( string $str , array $replace_pairs ) : string
PHP strtr()
Parameters
str
— The string being translated.from
— The string being translated to to.to
— The string replacing from.replace_pairs
— The replace_pairs parameter may be used instead of to and from, in which case it’s an array in the form array(‘from’ => ‘to’, …).
PHP strtr()
Return Value
The PHP strtr()
function returns the translated string.
PHP strtr()
Working Examples
1. strtr() example
<?php
//In this form, strtr() does byte-by-byte translation
//Therefore, we are assuming a single-byte encoding here:
$addr = strtr($addr, "äåö", "aao");
?>
2. strtr() example with two arguments
<?php
$trans = array("h" => "-", "hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);
?>
Output of the above code:
hello all, I said hi
3. strtr() behavior comparison
<?php
echo strtr("baab", "ab", "01"),"\n";
$trans = array("ab" => "01");
echo strtr("baab", $trans);
?>
Output of the above code:
1001
ba01
Additional Tips from Fellow Developers
Contributed By: evan dot king
Here's an important real-world example use-case for strtr where str_replace will not work or will introduce obscure bugs:
<?php
$strTemplate = "My name is :name, not :name2.";
$strParams = [
':name' => 'Dave',
'Dave' => ':name2 or :password', // a wrench in the otherwise sensible input
':name2' => 'Steve',
':pass' => '7hf2348', // sensitive data that maybe shouldn't be here
];
echo strtr($strTemplate, $strParams);
// "My name is Dave, not Steve."
echo str_replace(array_keys($strParams), array_values($strParams), $strTemplate);
// "My name is Steve or 7hf2348word, not Steve or 7hf2348word2."
?>
Any time you're trying to template out a string and don't necessarily know what the replacement keys/values will be (or fully understand the implications of and control their content and order), str_replace will introduce the potential to incorrectly match your keys because it does not expand the longest keys first.
Further, str_replace will replace in previous replacements, introducing potential for unintended nested expansions. Doing so can put the wrong data into the "sub-template" or even give users a chance to provide input that exposes data (if they get to define some of the replacement strings).
Don't support recursive expansion unless you need it and know it will be safe. When you do support it, do so explicitly by repeating strtr calls until no more expansions are occurring or a sane iteration limit is reached, so that the results never implicitly depend on order of your replacement keys. Also make certain that any user input will expanded in an isolated step after any sensitive data is already expanded into the output and no longer available as input.
Note: using some character(s) around your keys to designate them also reduces the possibility of unintended mangling of output, whether maliciously triggered or otherwise. Thus the use of a colon prefix in these examples, which you can easily enforce when accepting replacement input to your templating/translation system.
Contributed By:
Since strtr (like PHP's other string functions) treats strings as a sequence of bytes, and since UTF-8 and other multibyte encodings use - by definition - more than one byte for at least some characters, the three-string form is likely to have problems. Use the associative array form to specify the mapping.
<?php
// Assuming UTF-8
$str = 'Äbc Äbc'; // strtr() sees this as nine bytes (including two for each Ä)
echo strtr($str, 'Ä', 'a'); // The second argument is equivalent to the string "\xc3\x84" so "\xc3" gets replaced by "a" and the "\x84" is ignored
echo strtr($str, array('Ä' => 'a')); // Works much better
?>
Contributed By: allixsenos
Fixed "normaliza" functions written below to include Slavic Latin characters... also, it doesn't return lowercase any more (you can easily get that by applying strtolower yourself)...
also, renamed to normalize()
<?php
function normalize ($string) {
$table = array(
'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c',
'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r',
);
return strtr($string, $table);
}
?>
Contributed By: dot dot dot dot dot alexander
OK, I debugged the function (had some errors)
Here it is:
if(!function_exists("stritr")){
function stritr($string, $one = NULL, $two = NULL){
/*
stritr - case insensitive version of strtr
Author: Alexander Peev
Posted in PHP.NET
*/
if( is_string( $one ) ){
$two = strval( $two );
$one = substr( $one, 0, min( strlen($one), strlen($two) ) );
$two = substr( $two, 0, min( strlen($one), strlen($two) ) );
$product = strtr( $string, ( strtoupper($one) . strtolower($one) ), ( $two . $two ) );
return $product;
}
else if( is_array( $one ) ){
$pos1 = 0;
$product = $string;
while( count( $one ) > 0 ){
$positions = array();
foreach( $one as $from => $to ){
if( ( $pos2 = stripos( $product, $from, $pos1 ) ) === FALSE ){
unset( $one[ $from ] );
}
else{
$positions[ $from ] = $pos2;
}
}
if( count( $one ) <= 0 )break;
$winner = min( $positions );
$key = array_search( $winner, $positions );
$product = ( substr( $product, 0, $winner ) . $one[$key] . substr( $product, ( $winner + strlen($key) ) ) );
$pos1 = ( $winner + strlen( $one[$key] ) );
}
return $product;
}
else{
return $string;
}
}/* endfunction stritr */
}/* endfunction exists stritr */
PHP substr()
Function
What does substr()
do?
The PHP
function will give you the portion of substr()
string
specified by the start
and length
parameters.
PHP substr()
Syntax
substr ( string $string , int $start [, int $length ] ) : string
PHP substr()
Parameters
string
— The input string. Must be one character or longer.start
— If start is non-negative, the returned string will start at the start’th position in string, counting from zero. For instance, in the string ‘abcdef’, the character at position 0 is ‘a’, the character at position 2 is ‘c’, and so forth.length
— If length is given and is positive, the string returned will contain at most length characters beginning from start (depending on the length of string).
PHP substr()
Return Value
The PHP substr()
function returns the extracted part of string
; or FALSE
on failure, or an empty string.
PHP substr()
Working Examples
1. Using a negative start
<?php
$rest = substr("abcdef", -1); // returns "f"
$rest = substr("abcdef", -2); // returns "ef"
$rest = substr("abcdef", -3, 1); // returns "d"
?>
2. Using a negative length
<?php
$rest = substr("abcdef", 0, -1); // returns "abcde"
$rest = substr("abcdef", 2, -1); // returns "cde"
$rest = substr("abcdef", 4, -4); // returns false
$rest = substr("abcdef", -3, -1); // returns "de"
?>
3. Basic substr() usage
<?php
echo substr('abcdef', 1); // bcdef
echo substr('abcdef', 1, 3); // bcd
echo substr('abcdef', 0, 4); // abcd
echo substr('abcdef', 0, 8); // abcdef
echo substr('abcdef', -1, 1); // f
// Accessing single characters in a string
// can also be achieved using "square brackets"
$string = 'abcdef';
echo $string[0]; // a
echo $string[3]; // d
echo $string[strlen($string)-1]; // f
?>
4. substr() casting behaviour
<?php
class apple {
public function __toString() {
return "green";
}
}
echo "1) ".var_export(substr("pear", 0, 2), true).PHP_EOL;
echo "2) ".var_export(substr(54321, 0, 2), true).PHP_EOL;
echo "3) ".var_export(substr(new apple(), 0, 2), true).PHP_EOL;
echo "4) ".var_export(substr(true, 0, 1), true).PHP_EOL;
echo "5) ".var_export(substr(false, 0, 1), true).PHP_EOL;
echo "6) ".var_export(substr("", 0, 1), true).PHP_EOL;
echo "7) ".var_export(substr(1.2e3, 0, 4), true).PHP_EOL;
?>
Output of the above code:
1) 'pe'
2) '54'
3) 'gr'
4) '1'
5) ''
6) ''
7) '1200'
Changelog for PHP substr() Function
7.0.0 — If string
is equal to start
characters long, an empty string will be returned. Prior to this version, FALSE
was returned in this case.
5.2.2 – 5.2.6 — If the start
parameter indicates the position of a negative truncation or beyond, false is returned. Other versions get the string from start.
Additional Tips from Fellow Developers
Contributed By: Andreas Bur (andreas dot buro
For getting a substring of UTF-8 characters, I highly recommend mb_substr
<?php
$utf8string = "cakeæøå";
echo substr($utf8string,0,5);
// output cake#
echo mb_substr($utf8string,0,5,'UTF-8');
//output cakeæ
?>
Contributed By: biohazard dot ge
May be by following functions will be easier to extract the needed sub parts from a string:
<?php
after ('@', 'biohazard@online.ge');
//returns 'online.ge'
//from the first occurrence of '@'
before ('@', 'biohazard@online.ge');
//returns 'biohazard'
//from the first occurrence of '@'
between ('@', '.', 'biohazard@online.ge');
//returns 'online'
//from the first occurrence of '@'
after_last ('[', 'sin[90]*cos[180]');
//returns '180]'
//from the last occurrence of '['
before_last ('[', 'sin[90]*cos[180]');
//returns 'sin[90]*cos['
//from the last occurrence of '['
between_last ('[', ']', 'sin[90]*cos[180]');
//returns '180'
//from the last occurrence of '['
?>
here comes the source:
<?php
function after ($this, $inthat)
{
if (!is_bool(strpos($inthat, $this)))
return substr($inthat, strpos($inthat,$this)+strlen($this));
};
function after_last ($this, $inthat)
{
if (!is_bool(strrevpos($inthat, $this)))
return substr($inthat, strrevpos($inthat, $this)+strlen($this));
};
function before ($this, $inthat)
{
return substr($inthat, 0, strpos($inthat, $this));
};
function before_last ($this, $inthat)
{
return substr($inthat, 0, strrevpos($inthat, $this));
};
function between ($this, $that, $inthat)
{
return before ($that, after($this, $inthat));
};
function between_last ($this, $that, $inthat)
{
return after_last($this, before_last($that, $inthat));
};
// use strrevpos function in case your php version does not include it
function strrevpos($instr, $needle)
{
$rev_pos = strpos (strrev($instr), strrev($needle));
if ($rev_pos===false) return false;
else return strlen($instr) - $rev_pos - strlen($needle);
};
?>
Contributed By: pugazhenthi k
<?Php
### SUB STRING BY WORD USING substr() and strpos() #####
### THIS SCRIPT WILL RETURN PART OF STRING WITHOUT WORD BREAK ###
$description = ‘your description here your description here your description here your description here your description here your description here your description hereyour description here your description here’ // your description here .
$no_letter = 30 ;
if(strlen($desctiption) > 30 )
{
echo substr($description,0,strpos($description,’ ‘,30)); //strpos to find ‘ ‘ after 30 characters.
}
else {
echo $description;
}
?>
PHP substr_compare()
Function
What does substr_compare()
do?
The PHP
function will binary safe comparison of two strings from an offset, up to length characters.substr_compare()
PHP substr_compare()
Syntax
substr_compare ( string $main_str , string $str , int $offset [, int $length [, bool $case_insensitivity = FALSE ]] ) : int
PHP substr_compare()
Parameters
main_str
— The main string being compared.str
— The secondary string being compared.offset
— The start position for the comparison. If negative, it starts counting from the end of the string.length
— The length of the comparison. The default value is the largest of the length of the str compared to the length of main_str minus the offset.case_insensitivity
— If case_insensitivity is TRUE, comparison is case insensitive.
PHP substr_compare()
Return Value
The PHP substr_compare()
function returns < 0 if main_str
from position offset
is less than str
, > 0 if it is greater than str
, and 0 if they are equal. If offset
is equal to (prior to PHP 7.2.18, 7.3.5) or greater than the length of main_str
, or the length
is set and is less than 0, (or, prior to PHP 5.5.11, less than 1) substr_compare()
prints a warning and return FALSE
.
PHP substr_compare()
Working Examples
1. A substr_compare() example
<?php
echo substr_compare("abcde", "bc", 1, 2); // 0
echo substr_compare("abcde", "de", -2, 2); // 0
echo substr_compare("abcde", "bcg", 1, 2); // 0
echo substr_compare("abcde", "BC", 1, 2, true); // 0
echo substr_compare("abcde", "bc", 1, 3); // 1
echo substr_compare("abcde", "cd", 1, 2); // -1
echo substr_compare("abcde", "abc", 5, 1); // warning
?>
Changelog for PHP substr_compare() Function
7.2.18, 7.3.5 — offset
may now be equal to the length of main_str
.
5.5.11 — length
may now be 0.
5.1.0 — Added the possibility to use a negative offset
.
Additional Tips from Fellow Developers
Contributed By: jimmetry
When you came to this page, you may have been looking for something a little simpler: A function that can check if a small string exists within a larger string starting at a particular index. Using substr_compare() for this can leave your code messy, because you need to check that your string is long enough (to avoid the warning), manually specify the length of the short string, and like many of the string functions, perform an integer comparison to answer a true/false question.
I put together a simple function to return true if $str exists within $mainStr. If $loc is specified, the $str must begin at that index. If not, the entire $mainStr will be searched.
<?php
function contains_substr($mainStr, $str, $loc = false) {
if ($loc === false) return (strpos($mainStr, $str) !== false);
if (strlen($mainStr) < strlen($str)) return false;
if (($loc + strlen($str)) > strlen($mainStr)) return false;
return (strcmp(substr($mainStr, $loc, strlen($str)), $str) == 0);
}
?>
PHP substr_count()
Function
What does substr_count()
do?
The PHP
function will count the number of substring occurrences.substr_count()
PHP substr_count()
Syntax
substr_count ( string $haystack , string $needle [, int $offset = 0 [, int $length ]] ) : int
PHP substr_count()
Parameters
haystack
— The string to search inneedle
— The substring to search foroffset
— The offset where to start counting. If the offset is negative, counting starts from the end of the string.length
— The maximum length after the specified offset to search for the substring. It outputs a warning if the offset plus the length is greater than the haystack length. A negative length counts from the end of haystack.
PHP substr_count()
Return Value
The PHP substr_count()
function returns an integer.
PHP substr_count()
Working Examples
1. A substr_count() example
<?php
$text = 'This is a test';
echo strlen($text); // 14
echo substr_count($text, 'is'); // 2
// the string is reduced to 's is a test', so it prints 1
echo substr_count($text, 'is', 3);
// the text is reduced to 's i', so it prints 0
echo substr_count($text, 'is', 3, 3);
// generates a warning because 5+10 > 14
echo substr_count($text, 'is', 5, 10);
// prints only 1, because it doesn't count overlapped substrings
$text2 = 'gcdgcdgcd';
echo substr_count($text2, 'gcdgcd');
?>
Changelog for PHP substr_count() Function
7.1.0 — Support for negative offset
s and length
s has been added. length
may also be 0 now.
5.1.0 — Added the offset
and the length
parameters
Important Points about PHP substr_count()
Function
This function doesn’t count overlapped substrings. See the example below!
Additional Tips from Fellow Developers
Contributed By: tuxedobob
It's worth noting this function is surprisingly fast. I first ran it against a ~500KB string on our web server. It found 6 occurrences of the needle I was looking for in 0.0000 seconds. Yes, it ran faster than microtime() could measure.
Looking to give it a challenge, I then ran it on a Mac laptop from 2010 against a 120.5MB string. For one test needle, it found 2385 occurrences in 0.0266 seconds. Another test needs found 290 occurrences in 0.114 seconds.
Long story short, if you're wondering whether this function is slowing down your script, the answer is probably not.
PHP substr_replace()
Function
What does substr_replace()
do?
The PHP
function will replace text within a portion of a string.substr_replace()
PHP substr_replace()
Syntax
substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) : mixed
PHP substr_replace()
Parameters
string
— The input string.replacement
— The replacement string.start
— If start is non-negative, the replacing will begin at the start’th offset into string.length
— If given and is positive, it represents the length of the portion of string which is to be replaced. If it is negative, it represents the number of characters from the end of string at which to stop replacing. If it is not given, then it will default to strlen( string ); i.e. end the replacing at the end of string. Of course, if length is zero then this function will have the effect of inserting replacement into string at the given start offset.
PHP substr_replace()
Return Value
The PHP substr_replace()
function returns d. If string
is an array then array is returned.
PHP substr_replace()
Working Examples
1. Simple substr_replace() examples
<?php
$var = 'ABCDEFGH:/MNRPQR/';
echo "Original: $var<hr />\n";
/* These two examples replace all of $var with 'bob'. */
echo substr_replace($var, 'bob', 0) . "<br />\n";
echo substr_replace($var, 'bob', 0, strlen($var)) . "<br />\n";
/* Insert 'bob' right at the beginning of $var. */
echo substr_replace($var, 'bob', 0, 0) . "<br />\n";
/* These next two replace 'MNRPQR' in $var with 'bob'. */
echo substr_replace($var, 'bob', 10, -1) . "<br />\n";
echo substr_replace($var, 'bob', -7, -1) . "<br />\n";
/* Delete 'MNRPQR' from $var. */
echo substr_replace($var, '', 10, -1) . "<br />\n";
?>
2. Using substr_replace() to replace multiple strings at once
<?php
$input = array('A: XXX', 'B: XXX', 'C: XXX');
// A simple case: replace XXX in each string with YYY.
echo implode('; ', substr_replace($input, 'YYY', 3, 3))."\n";
// A more complicated case where each replacement is different.
$replace = array('AAA', 'BBB', 'CCC');
echo implode('; ', substr_replace($input, $replace, 3, 3))."\n";
// Replace a different number of characters each time.
$length = array(1, 2, 3);
echo implode('; ', substr_replace($input, $replace, 3, $length))."\n";
?>
Output of the above code:
A: YYY; B: YYY; C: YYY
A: AAA; B: BBB; C: CCC
A: AAAXX; B: BBBX; C: CCC
Additional Tips from Fellow Developers
Contributed By: elloromtz
It's worth noting that when start and length are both negative -and- the length is less than or equal to start, the length will have the effect of being set as 0.
<?php
substr_replace('eggs','x',-1,-1); //eggxs
substr_replace('eggs','x',-1,-2); //eggxs
substr_replace('eggs','x',-1,-2); //eggxs
?>
Same as:
<?php
substr_replace('eggs','x',-1,0); //eggxs
?>
<?php
substr_replace('huevos','x',-2,-2); //huevxos
substr_replace('huevos','x',-2,-3); //huevxos
substr_replace('huevos','x',-2,-3); //huevxos
?>
Same as:
<?php
substr_replace('huevos','x',-2,0); //huevxos
?>
Another note, if length is negative and start offsets the same position as length, length (yet again) will have the effect as being set as 0. (Of course, as mentioned in the manual, when length is negative it actually represents the position before it)
<?php
substr_replace('abcd', 'x', 0, -4); //xabcd
?>
Same as:
<?php
substr_replace('abcd','x',0,0); //xabcd
?>
<?php
substr_replace('abcd', 'x', 1, -3); //axbcd
?>
Same as:
<?php
substr_replace('abcd', 'x', 1, 0); //axbcd
?>
PHP trim()
Function
What does trim()
do?
The PHP
function will strip whitespace (or other characters) from the beginning and end of a string.trim()
PHP trim()
Syntax
trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] ) : string
PHP trim()
Parameters
str
— The string that will be trimmed.character_mask
— Optionally, the stripped characters can also be specified using the character_mask parameter. Simply list all characters that you want to be stripped. With .. you can specify a range of characters.
PHP trim()
Return Value
The PHP trim()
function returns the trimmed string.
PHP trim()
Working Examples
1. Usage example of trim()
<?php
$text = "\t\tThese are a few words :) ... ";
$binary = "\x09Example string\x0A";
$hello = "Hello World";
var_dump($text, $binary, $hello);
print "\n";
$trimmed = trim($text);
var_dump($trimmed);
$trimmed = trim($text, " \t.");
var_dump($trimmed);
$trimmed = trim($hello, "Hdle");
var_dump($trimmed);
$trimmed = trim($hello, 'HdWr');
var_dump($trimmed);
// trim the ASCII control characters at the beginning and end of $binary
// (from 0 to 31 inclusive)
$clean = trim($binary, "\x00..\x1F");
var_dump($clean);
?>
Output of the above code:
string(32) " These are a few words :) ... "
string(16) " Example string
"
string(11) "Hello World"
string(28) "These are a few words :) ..."
string(24) "These are a few words :)"
string(5) "o Wor"
string(9) "ello Worl"
string(14) "Example string"
2. Trimming array values with trim()
<?php
function trim_value(&$value)
{
$value = trim($value);
}
$fruit = array('apple','banana ', ' cranberry ');
var_dump($fruit);
array_walk($fruit, 'trim_value');
var_dump($fruit);
?>
Output of the above code:
array(3) {
[0]=>
string(5) "apple"
[1]=>
string(7) "banana "
[2]=>
string(11) " cranberry "
}
array(3) {
[0]=>
string(5) "apple"
[1]=>
string(6) "banana"
[2]=>
string(9) "cranberry"
}
Important Points about PHP trim()
Function
Because
trim()
trims characters from the beginning and end of a string, it may be confusing when characters are (or are not) removed from the middle. trim(‘abc’, ‘bad’) removes both ‘a’ and ‘b’ because it trims ‘a’ thus moving ‘b’ to the beginning to also be trimmed. So, this is why it “works” whereas trim(‘abc’, ‘b’) seemingly does not.
Additional Tips from Fellow Developers
Contributed By: Piopier
It may be useful to know that trim() returns an empty string when the argument is an unset/null variable.
Contributed By: aalhad
When specifying the character mask,
make sure that you use double quotes
<?php
$hello = "
Hello World "; //here is a string with some trailing and leading whitespace
$trimmed_correct = trim($hello, " \t\n\r"); //<--------OKAY
$trimmed_incorrect = trim($hello, ' \t\n\r'); //<--------NOT AS EXPECTED
print("----------------------------");
print("TRIMMED OK:".PHP_EOL);
print_r($trimmed_correct.PHP_EOL);
print("----------------------------");
print("TRIMMING NOT OK:".PHP_EOL);
print_r($trimmed_incorrect.PHP_EOL);
print("----------------------------".PHP_EOL);
?>
Here is the output:
----------------------------TRIMMED OK:
Hello World
----------------------------TRIMMING NOT OK:
Hello World
----------------------------
Contributed By: ludko2
Non-breaking spaces can be troublesome with trim:
<?php
// turn some HTML with non-breaking spaces into a "normal" string
$myHTML = " abc";
$converted = strtr($myHTML, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES)));
// this WILL NOT work as expected
// $converted will still appear as " abc" in view source
// (but not in od -x)
$converted = trim($converted);
// are translated to 0xA0, so use:
$converted = trim($converted, "\xA0"); // <- THIS DOES NOT WORK
// EDITED>>
// UTF encodes it as chr(0xC2).chr(0xA0)
$converted = trim($converted,chr(0xC2).chr(0xA0)); // should work
// PS: Thanks to John for saving my sanity!
?>
Contributed By: jubi
To remove multiple occurences of whitespace characters in a string an convert them all into single spaces, use this:
<?
$text = preg_replace('/\s+/', ' ', $text);
?>
------------
JUBI
http://www.jubi.buum.pl
PHP ucfirst()
Function
What does ucfirst()
do?
The PHP
function will make a string’s first character uppercase.ucfirst()
PHP ucfirst()
Syntax
ucfirst ( string $str ) : string
PHP ucfirst()
Parameters
str
— The input string.
PHP ucfirst()
Return Value
The PHP ucfirst()
function returns the resulting string.
PHP ucfirst()
Working Examples
1. ucfirst() example
<?php
$foo = 'hello world!';
$foo = ucfirst($foo); // Hello world!
$bar = 'HELLO WORLD!';
$bar = ucfirst($bar); // HELLO WORLD!
$bar = ucfirst(strtolower($bar)); // Hello world!
?>
Additional Tips from Fellow Developers
Contributed By: plemieux
Simple multi-bytes ucfirst():
<?php
function my_mb_ucfirst($str) {
$fc = mb_strtoupper(mb_substr($str, 0, 1));
return $fc.mb_substr($str, 1);
}
?>
Contributed By: prokur.net – there is my email
I believe that mb_ucfirst will be soon added in PHP, but for now this could be useful
<?php
if (!function_exists('mb_ucfirst') && function_exists('mb_substr')) {
function mb_ucfirst($string) {
$string = mb_strtoupper(mb_substr($string, 0, 1)) . mb_substr($string, 1);
return $string;
}
}
?>
it also check is mb support enabled or not
Contributed By: mattalexxpub
This is what I use for converting strings to sentence case:
<?php
function sentence_case($string) {
$sentences = preg_split('/([.?!]+)/', $string, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
$new_string = '';
foreach ($sentences as $key => $sentence) {
$new_string .= ($key & 1) == 0?
ucfirst(strtolower(trim($sentence))) :
$sentence.' ';
}
return trim($new_string);
}
print sentence_case('HMM. WOW! WHAT?');
// Outputs: "Hmm. Wow! What?"
?>
PHP ucwords()
Function
What does ucwords()
do?
The PHP
function will uppercase the first character of each word in a string.ucwords()
PHP ucwords()
Syntax
ucwords ( string $str [, string $delimiters = " \t\r\n\f\v" ] ) : string
PHP ucwords()
Parameters
str
— The input string.delimiters
— The optional delimiters contains the word separator characters.
PHP ucwords()
Return Value
The PHP ucwords()
function returns the modified string.
PHP ucwords()
Working Examples
1. ucwords() example
<?php
$foo = 'hello world!';
$foo = ucwords($foo); // Hello World!
$bar = 'HELLO WORLD!';
$bar = ucwords($bar); // HELLO WORLD!
$bar = ucwords(strtolower($bar)); // Hello World!
?>
2. ucwords() example with custom delimiter
<?php
$foo = 'hello|world!';
$bar = ucwords($foo); // Hello|world!
$baz = ucwords($foo, "|"); // Hello|World!
?>
Changelog for PHP ucwords() Function
5.4.32, 5.5.16 — Added the delimiters
parameter.
Additional Tips from Fellow Developers
Contributed By: jmarois
My quick and dirty ucname (Upper Case Name) function.
<?php
//FUNCTION
function ucname($string) {
$string =ucwords(strtolower($string));
foreach (array('-', '\'') as $delimiter) {
if (strpos($string, $delimiter)!==false) {
$string =implode($delimiter, array_map('ucfirst', explode($delimiter, $string)));
}
}
return $string;
}
?>
<?php
//TEST
$names =array(
'JEAN-LUC PICARD',
'MILES O\'BRIEN',
'WILLIAM RIKER',
'geordi la forge',
'bEvErly CRuSHeR'
);
foreach ($names as $name) { print ucname("{$name}\n"); }
//PRINTS:
/*
Jean-Luc Picard
Miles O'Brien
William Riker
Geordi La Forge
Beverly Crusher
*/
?>
You can add more delimiters in the for-each loop array if you want to handle more characters.
Contributed By: antoniomax
Para formatar nomes em pt-br:
<?php
function titleCase($string, $delimiters = array(" ", "-", ".", "'", "O'", "Mc"), $exceptions = array("de", "da", "dos", "das", "do", "I", "II", "III", "IV", "V", "VI"))
{
/*
* Exceptions in lower case are words you don't want converted
* Exceptions all in upper case are any words you don't want converted to title case
* but should be converted to upper case, e.g.:
* king henry viii or king henry Viii should be King Henry VIII
*/
$string = mb_convert_case($string, MB_CASE_TITLE, "UTF-8");
foreach ($delimiters as $dlnr => $delimiter) {
$words = explode($delimiter, $string);
$newwords = array();
foreach ($words as $wordnr => $word) {
if (in_array(mb_strtoupper($word, "UTF-8"), $exceptions)) {
// check exceptions list for any words that should be in upper case
$word = mb_strtoupper($word, "UTF-8");
} elseif (in_array(mb_strtolower($word, "UTF-8"), $exceptions)) {
// check exceptions list for any words that should be in upper case
$word = mb_strtolower($word, "UTF-8");
} elseif (!in_array($word, $exceptions)) {
// convert to uppercase (non-utf8 only)
$word = ucfirst($word);
}
array_push($newwords, $word);
}
$string = join($delimiter, $newwords);
}//foreach
return $string;
}
?>
Usage:
<?php
$s = 'SÃO JOÃO DOS SANTOS';
$v = titleCase($s); // 'São João dos Santos'
?>
Contributed By: robert
Some recipes for switching between underscore and camelcase naming:
<?php
// underscored to upper-camelcase
// e.g. "this_method_name" -> "ThisMethodName"
preg_replace('/(?:^|_)(.?)/e',"strtoupper('$1')",$string);
// underscored to lower-camelcase
// e.g. "this_method_name" -> "thisMethodName"
preg_replace('/_(.?)/e',"strtoupper('$1')",$string);
// camelcase (lower or upper) to underscored
// e.g. "thisMethodName" -> "this_method_name"
// e.g. "ThisMethodName" -> "this_method_name"
strtolower(preg_replace('/([^A-Z])([A-Z])/', "$1_$2", $string));
?>
Of course these aren't 100% symmetric. For example...
* this_is_a_string -> ThisIsAString -> this_is_astring
* GetURLForString -> get_urlfor_string -> GetUrlforString
Contributed By: Luca Borrione luca -a email -d c_o_m
Features:
- multi byte compatible
- handles multiple delimiters
<?php
function ucwords_specific ($string, $delimiters = '', $encoding = NULL)
{
if ($encoding === NULL) { $encoding = mb_internal_encoding();}
if (is_string($delimiters))
{
$delimiters = str_split( str_replace(' ', '', $delimiters));
}
$delimiters_pattern1 = array();
$delimiters_replace1 = array();
$delimiters_pattern2 = array();
$delimiters_replace2 = array();
foreach ($delimiters as $delimiter)
{
$uniqid = uniqid();
$delimiters_pattern1[] = '/'. preg_quote($delimiter) .'/';
$delimiters_replace1[] = $delimiter.$uniqid.' ';
$delimiters_pattern2[] = '/'. preg_quote($delimiter.$uniqid.' ') .'/';
$delimiters_replace2[] = $delimiter;
}
// $return_string = mb_strtolower($string, $encoding);
$return_string = $string;
$return_string = preg_replace($delimiters_pattern1, $delimiters_replace1, $return_string);
$words = explode(' ', $return_string);
foreach ($words as $index => $word)
{
$words[$index] = mb_strtoupper(mb_substr($word, 0, 1, $encoding), $encoding).mb_substr($word, 1, mb_strlen($word, $encoding), $encoding);
}
$return_string = implode(' ', $words);
$return_string = preg_replace($delimiters_pattern2, $delimiters_replace2, $return_string);
return $return_string;
}
?>
Params:
1. string: The string being converted
2. delimiters: a string with all wanted delimiters written one after the other e.g. "-'"
3. encoding: Is the character encoding. If it is omitted, the internal character encoding value will be used.
Example Usage:
<?php
mb_internal_encoding('UTF-8');
$string = "JEAN-PAUL d'artagnan şŠ-òÀ-éÌ hello - world";
echo ucwords_specific( mb_strtolower($string, 'UTF-8'), "-'");
?>
Output:
Jean-Paul D'Artagnan Şš-Òà-Éì Hello - World
PHP vfprintf()
Function
What does vfprintf()
do?
The PHP
function will write a string produced according to vfprintf()
format
to the stream resource specified by handle
.
PHP vfprintf()
Syntax
vfprintf ( resource $handle , string $format , array $args ) : int
PHP vfprintf()
Parameters
handle
—format
— The format string is composed of zero or more directives: ordinary characters (excluding %) that are copied directly to the result and conversion specifications, each of which results in fetching its own parameter.args
—
PHP vfprintf()
Return Value
The PHP vfprintf()
function returns the length of the outputted string.
PHP vfprintf()
Working Examples
1. vfprintf(): zero-padded integers
<?php
if (!($fp = fopen('date.txt', 'w')))
return;
vfprintf($fp, "%04d-%02d-%02d", array($year, $month, $day));
// will write the formatted ISO date to date.txt
?>
Important Points about PHP vfprintf()
Function
The c type specifier ignores padding and width
Attempting to use a combination of the string and width specifiers with character sets that require more than one byte per character may result in unexpected results
PHP vprintf()
Function
What does vprintf()
do?
The PHP
function will display array values as a formatted string according to vprintf()
format
(which is described in the documentation for sprintf()
).
PHP vprintf()
Syntax
vprintf ( string $format , array $args ) : int
PHP vprintf()
Parameters
format
— The format string is composed of zero or more directives: ordinary characters (excluding %) that are copied directly to the result and conversion specifications, each of which results in fetching its own parameter.args
—
PHP vprintf()
Return Value
The PHP vprintf()
function returns the length of the outputted string.
PHP vprintf()
Working Examples
1. vprintf(): zero-padded integers
<?php
vprintf("%04d-%02d-%02d", explode('-', '1988-8-1'));
?>
Output of the above code:
1988-08-01
Important Points about PHP vprintf()
Function
The c type specifier ignores padding and width
Attempting to use a combination of the string and width specifiers with character sets that require more than one byte per character may result in unexpected results
PHP vsprintf()
Function
What does vsprintf()
do?
The PHP
function will operates as vsprintf()
sprintf()
but accepts an array of arguments, rather than a variable number of arguments.
PHP vsprintf()
Syntax
vsprintf ( string $format , array $args ) : string
PHP vsprintf()
Parameters
format
— The format string is composed of zero or more directives: ordinary characters (excluding %) that are copied directly to the result and conversion specifications, each of which results in fetching its own parameter.args
—
PHP vsprintf()
Return Value
The PHP vsprintf()
function returns
PHP vsprintf()
Working Examples
1. vsprintf(): zero-padded integers
<?php
print vsprintf("%04d-%02d-%02d", explode('-', '1988-8-1'));
?>
Output of the above code:
1988-08-01
Important Points about PHP vsprintf()
Function
The c type specifier ignores padding and width
Attempting to use a combination of the string and width specifiers with character sets that require more than one byte per character may result in unexpected results
Additional Tips from Fellow Developers
Contributed By:
Instead of inventing own functions in case you'd like to use array keys as placeholder names and replace corresponding array values in a string, just use the str_replace:
$string = 'Hello %name!';
$data = array(
'%name' => 'John'
);
$greeting = str_replace(array_keys($data), array_values($data), $string);
Contributed By: Josef Kufner
<?php
/**
* Like vsprintf, but accepts $args keys instead of order index.
* Both numeric and strings matching /[a-zA-Z0-9_-]+/ are allowed.
*
* Example: vskprintf('y = %y$d, x = %x$1.1f', array('x' => 1, 'y' => 2))
* Result: 'y = 2, x = 1.0'
*
* $args also can be object, then it's properties are retrieved
* using get_object_vars().
*
* '%s' without argument name works fine too. Everything vsprintf() can do
* is supported.
*
* @author Josef Kufner <jkufner(at)gmail.com>
*/
function vksprintf($str, $args)
{
if (is_object($args)) {
$args = get_object_vars($args);
}
$map = array_flip(array_keys($args));
$new_str = preg_replace_callback('/(^|[^%])%([a-zA-Z0-9_-]+)\$/',
function($m) use ($map) { return $m[1].'%'.($map[$m[2]] + 1).'$'; },
$str);
return vsprintf($new_str, $args);
}
?>
PHP wordwrap()
Function
What does wordwrap()
do?
The PHP
function will wraps a string to a given number of characters.wordwrap()
PHP wordwrap()
Syntax
wordwrap ( string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = FALSE ]]] ) : string
PHP wordwrap()
Parameters
str
— The input string.width
— The number of characters at which the string will be wrapped.break
— The line is broken using the optional break parameter.cut
— If the cut is set to TRUE, the string is always wrapped at or before the specified width. So if you have a word that is larger than the given width, it is broken apart. (See second example). When FALSE the function does not split the word even if the width is smaller than the word width.
PHP wordwrap()
Return Value
The PHP wordwrap()
function returns the given string wrapped at the specified length.
PHP wordwrap()
Working Examples
1. wordwrap() example
<?php
$text = "The quick brown fox jumped over the lazy dog.";
$newtext = wordwrap($text, 20, "<br />\n");
echo $newtext;
?>
Output of the above code:
The quick brown fox<br />
jumped over the lazy<br />
dog.
2. wordwrap() example
<?php
$text = "A very long woooooooooooord.";
$newtext = wordwrap($text, 8, "\n", true);
echo "$newtext\n";
?>
Output of the above code:
A very
long
wooooooo
ooooord.
3. wordwrap() example
<?php
$text = "A very long woooooooooooooooooord. and something";
$newtext = wordwrap($text, 8, "\n", false);
echo "$newtext\n";
?>
Output of the above code:
A very
long
woooooooooooooooooord.
and
something
Additional Tips from Fellow Developers
Contributed By: ju1ius
Another solution to utf-8 safe wordwrap, unsing regular expressions.
Pretty good performance and works in linear time.
<?php
function utf8_wordwrap($string, $width=75, $break="\n", $cut=false)
{
if($cut) {
// Match anything 1 to $width chars long followed by whitespace or EOS,
// otherwise match anything $width chars long
$search = '/(.{1,'.$width.'})(?:\s|$)|(.{'.$width.'})/uS';
$replace = '$1$2'.$break;
} else {
// Anchor the beginning of the pattern with a lookahead
// to avoid crazy backtracking when words are longer than $width
$pattern = '/(?=\s)(.{1,'.$width.'})(?:\s|$)/uS';
$replace = '$1'.$break;
}
return preg_replace($search, $replace, $string);
}
?>
Of course don't forget to use preg_quote on the $width and $break parameters if they come from untrusted input.
Contributed By: Dave Lozier – dave
If you'd like to break long strings of text but avoid breaking html you may find this useful. It seems to be working for me, hope it works for you. Enjoy. :)
<?php
function textWrap($text) {
$new_text = '';
$text_1 = explode('>',$text);
$sizeof = sizeof($text_1);
for ($i=0; $i<$sizeof; ++$i) {
$text_2 = explode('<',$text_1[$i]);
if (!empty($text_2[0])) {
$new_text .= preg_replace('#([^\n\r .]{25})#i', '\\1 ', $text_2[0]);
}
if (!empty($text_2[1])) {
$new_text .= '<' . $text_2[1] . '>';
}
}
return $new_text;
}
?>
Rate this post —