It may be useful to know that trim() returns an empty string when the argument is an unset/null variable.
(PHP 4, PHP 5, PHP 7, PHP 8)
trim — Dizgenin başındaki ve sonundaki boşlukları (veya diğer karakterleri) budar
$dizge
, string $karakterler
= " \n\r\t\v\0"): string
Bu işlev dizge
'nin başındaki ve sonundaki
boşlukları budar. İkinci değiştirge olmaksızın trim()
sadece aşağıdaki karakterleri budayacaktır:
32
(0x20
)), sıradan boşluk.
9
(0x09
)), sekme.
10
(0x0A
)), satırsonu.
13
(0x0D
)), satırbaşı.
0
(0x00
)), NUL
-bayt.
11
(0x0B
)), dikey sekme.
dizge
Budanacak dizge.
karakterler
Seçimlik olarak, karakterler
değiştirgesi
kullanılarak budanacak karakterler belirlenebilir.
Basitçe budamak istediğiniz tüm karakterleri belirtin. Bir karakter
aralığını ..
kullanarak belirtebilirsiniz.
Budanmış dizge.
Örnek 1 - trim() işlevinin kullanımı
<?php
$metin = "\t\tBir kaç kelam :) ... ";
$ikil = "\x09Örnek dizge\x0A";
$selam = "Merhaba Dünya";
var_dump($metin, $ikil, $selam);
print "\n";
$kırpık = trim($metin);
var_dump($kırpık);
$kırpık = trim($metin, " \t.");
var_dump($kırpık);
$kırpık = trim($selam, "aerMy");
var_dump($kırpık);
// $ikil'in başındaki ve sonundaki ASCII denetim karakterlerini budar
// (0'dan 31'e kadar, 0 ve 31 dahil)
$temiz = trim($ikil, "\x00..\x1F");
var_dump($temiz);
?>
Yukarıdaki örneğin çıktısı:
string(25) " Bir kaç kelam :) ... " string(14) " Örnek dizge " string(14) "Merhaba Dünya" string(21) "Bir kaç kelam :) ..." string(17) "Bir kaç kelam :)" string(9) "haba Dün" string(12) "Örnek dizge"
Örnek 2 - trim() işlevini dizi değerlerine uygulama
<?php
function değeri_buda(&$değer)
{
$değer = trim($değer);
}
$meyve = array('elma','muz ', ' muşmula ');
var_dump($meyve);
array_walk($meyve, 'değeri_buda');
var_dump($meyve);
?>
Yukarıdaki örneğin çıktısı:
array(3) { [0]=> string(4) "elma" [1]=> string(4) "muz " [2]=> string(10) " muşmula " } array(3) { [0]=> string(4) "elma" [1]=> string(3) "muz" [2]=> string(8) "muşmula" }
Bilginize: Olası sorun: Aradaki karakterlerin kaldırılması
trim() karakterleri bir dizenin başından ve sonundan kırptığı için, aradaki karakterlerin kırpılması (veya kırpılmaması) kafa karıştırıcı olabilir.
trim('abc', 'bad')
hem 'a' hem de 'b'yi kırpar, çünkü 'a'yı kırpar, böylece 'b' de kırpılmak üzere başa taşınmış olur. Yani, bu "çalışıyor" datrim('abc', 'b')
"neden çalışmıyor"un açıklaması budur.
It may be useful to know that trim() returns an empty string when the argument is an unset/null variable.
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
----------------------------
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!
?>
It is worth mentioning that trim, ltrim and rtrim are NOT multi-byte safe, meaning that trying to remove an utf-8 encoded non-breaking space for instance will result in the destruction of utf-8 characters than contain parts of the utf-8 encoded non-breaking space, for instance:
non breaking-space is "\u{a0}" or "\xc2\xa0" in utf-8, "µ" is "\u{b5}" or "\xc2\xb5" in utf-8 and "à" is "\u{e0}" or "\xc3\xa0" in utf-8
$input = "\u{a0}µ déjà\u{a0}"; // " µ déjà "
$output = trim($input, "\u{a0}"); // "▒ déj▒" or whatever how the interpretation of broken utf-8 characters is performed
$output got both "\u{a0}" characters removed but also both "µ" and "à" characters destroyed
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
trim is the fastest way to remove first and last char.
Benchmark comparsion 4 different ways to trim string with '/'
4 functions with the same result - array exploded by '/'
<?php
$s = '/catalog/lyustry/svet/dom-i-svet/';
$times = 100000;
print cycle("str_preg('$s');", $times);
print cycle("str_preg2('$s');", $times);
print cycle("str_sub_replace('$s');", $times);
print cycle("str_trim('$s');", $times);
print cycle("str_clear('$s');", $times);
//print_r(str_preg2($s));
function cycle($function, $times){
$count = 0;
if($times < 1){
return false;
}
$start = microtime(true);
while($times > $count){
eval($function);
$count++;
}
$end = microtime(true) - $start;
return "\n $function exec time: $end";
}
function str_clear($s){
$s = explode('/', $s);
$s = array_filter($s, function ($s){if(!empty($s)) return true;});
return $s;
}
function str_preg2($s){
$s = preg_replace('/((?<!.)\/(?=.))?((?<=.)\/(?!.))?/i', '', $s);
$s = explode('/', $s);
return $s;
}
function str_preg($s){
$s = preg_replace('/^(\/?)(.*?)(\/?)$/i', '$2', $s);
$s = explode('/', $s);
return $s;
}
function str_sub_replace($s){
$s = str_replace('/' , '' , mb_substr( $s , 0, 1)) . mb_substr( $s , 1, -1) . str_replace('/', '', mb_substr( $s , -1));
$s = explode('/', $s);
return $s;
}
function str_trim($s){
$s = trim($s, '/');
$s = explode('/', $s);
return $s;
}
Another way to trim all the elements of an array
<?php
$newarray = array_map('trim', $array);
?>
if you are using trim and you still can't remove the whitespace then check if your closing tag inside the html document is NOT at the next line.
<textarea class="form-control" rows="5"><?php echo trim($comment);?></textarea>
there should be no spaces at the beginning and end of your echo statement, else trim will not work as expected.
Trim full width space will return mess character, when target string starts with '《'
@example
echo trim("《", " ");
@return
�
php version 5.4.27
[EDIT by cmb AT php DOT net: it is not necessarily safe to use trim with multibyte character encodings. The given example is equivalent to echo trim("\xe3\80\8a", "\xe3\x80\x80").]
This is the best solution I've found that strips all types of whitespace and it multibyte safe
$new_str = trim(preg_replace("/\s+/u", " ", $str));
Solution taken from here:
https://stackoverflow.com/a/40264711/966058
Care should be taken if the string to be trimmed contains intended characters from the definition list.
E.g. if you want to trim just starting and ending quote characters, trim will also remove a trailing quote that was intentionally contained in the string, if at position 0 or at the end, and if the string was defined in double quotes, then trim will only remove the quote character itself, but not the backslash that was used for it's definition. Yields interesting output and may be puzzling to debug...
The comment of "ludko2 at gmail dot com" for trimming non-breaking spaces is wrong due the the way UTF-8 works. For example, it breaks on `" abà"`.
Standard trim() functions can be a problematic when come HTML entities. That's why i wrote "Super Trim" function what is used to handle with this problem and also you can choose is trimming from the begin, end or booth side of string.
<?php
function strim($str,$charlist=" ",$option=0){
if(is_string($str))
{
// Translate HTML entities
$return = strtr($str, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES)));
// Remove multi whitespace
$return = preg_replace("@\s+\s@Ui"," ",$return);
// Choose trim option
switch($option)
{
// Strip whitespace (and other characters) from the begin and end of string
default:
case 0:
$return = trim($return,$charlist);
break;
// Strip whitespace (and other characters) from the begin of string
case 1:
$return = ltrim($return,$charlist);
break;
// Strip whitespace (and other characters) from the end of string
case 2:
$return = rtrim($return,$charlist);
break;
}
}
return $return;
}
?>
Simple Example I hope you will understand easily:
<?php
// Inserting empty variable;
$name = "";
if( !(empty( $name )) )
{
$sql = "INSERT INTO `users`( name ) VALUE( '$name' );";
}
// But is not empty that will be inserted but space
$name2 = " ";
if( !(empty( $name )) )
{
$sql = "INSERT INTO `users`( name ) VALUE( '$name' );";
}
// Now that will not be inserted by using trim() function
$name3 = " ";
if( !(empty( trim($name) )) )
{
$sql = "INSERT INTO `users`( name ) VALUE( '$name' );";
}
?>
If you want to check whether something ONLY has whitespaces, use the following:
<?php
if (trim($foobar)=='') {
echo 'The string $foobar only contains whitespace!';
}
?>
Beware with trimming apparently innocent characters. It is NOT a Unicode-safe function:
<?php
echo trim('≈ [Approximation sign]', '– [en-dash]'); // �� [Approximation sig
?>
The en-dash here is breaking the Unicode characters.
And also prevents the open-square-bracket from being seen as part of the characters to trim on the left side, letting it untouched in the resulting string.
You can combine character ranges and individual characters in trim()'s second argument (ditto for ltrim and rtrim). All of the specified characters and ranges will be used concurrently (i.e., if a character on either end of the string matches any of the specified charaters or character ranges, it will be trimmed). The characters and character ranges can be in any order (except of course that the character ranges need to be specified in increasing order) and may overlap.
E.g., trim any nongraphical non-ASCII character:
trim($text,"\x7f..\xff\x0..\x1f");