php - remove - strip_tags wordpress
Reparar la función vacía de PHP (12)
PHP tiene el hábito de evaluar (int) 0 y (cadena) "0" como vacío cuando usa la función empty()
. Esto puede tener resultados no deseados si espera valores numéricos o de cadena de 0. ¿Cómo puedo "arreglarlo" para que solo devuelva verdadero a objetos vacíos, matrices, cadenas, etc.?
"0" siempre se considera falso (o vacío) en PHP, y tiene mucho sentido (no es que lo argumente aquí). Si desea que la evaluación cero sea verdadera también, use strlen($value)
.
"Fijar" es un punto de vista. Otra sería suponer que no está "roto", y aprender a trabajar con ella de la manera en que fue diseñada intencionalmente.
Dado el problema tal como lo describe, lo mejor sería ajustar su código para que la variable no pueda ponerse en un estado de tipo indeterminado. De lo contrario, querrás probar el tipo de datos usando gettype ().
En general, quiere usar el operador triple equals para determinar cuándo un valor realmente es nulo o falso. Esto es más específico y los resultados SIEMPRE regresan exactamente como se esperaba.
Crear una función separada para hacer algo que puede hacer en una sola línea de código pero utilizando un operador diferente parece ser demasiado complicado y agrega una ofuscación adicional.
Además, muchos programadores tienden a usar 0 o una cadena vacía para denotar un valor inexistente, pero es más correcto (y me parece una práctica mejor) usar un valor nulo para indicar cualquier valor (independientemente del tipo) que sea realmente no -existente.
Está intentando usar empty()
para algo para lo que no está destinado. Personalmente, creo que su comportamiento proviene de un paradigma de programación anterior en PHP y probablemente podría retirarse.
En cambio, haz tus cheques más explícitos. En lugar de verificar si el valor no es útil, verifique que sí lo es. Por ejemplo, si desea una matriz, compruebe que es una matriz ( is_array()
) en lugar de comprobar si se trata de una cadena.
Además, puede confiar en el hecho de que todas las variables $_POST
y $_GET
son cadenas, por lo que puede hacer comparaciones con "", o verificar que strlen() == 0
.
Esto no funcionó para mí.
if (empty($variable) && ''0'' != $variable) {
// Do something
}
Yo usé en cambio:
if (empty($variable) && strlen($variable) == 0) {
// Do something
}
La solución más efectiva para este problema es probar si la variable es falsa, por ejemplo
if (!$variable_name) {echo $variable_name;}
No importa si la variable está vacía o nula, todo es igual a falso cuando se pone en un si condicional.
Rara vez uso empty()
por la razón que describes. Confunde los valores legítimos con el vacío. Tal vez sea porque trabajo mucho en SQL, pero prefiero usar NULL
para denotar la ausencia de un valor.
PHP tiene una función is_null()
que prueba que una variable o expresión sea NULL
.
$foo = 0;
if (is_null($foo)) print "integer 0 is null!/n";
else print "integer 0 foo is not null!/n";
$foo = "0";
if (is_null($foo)) print "string ''0'' is null!/n";
else print "string ''0'' is not null!/n";
$foo = "";
if (is_null($foo)) print "string '''' is null!/n";
else print "string '''' is not null!/n";
$foo = false;
if (is_null($foo)) print "boolean false is null!/n";
else print "boolean false is not null!/n";
También puede usar el operador exactamente igual ===
para hacer una prueba similar:
if ($foo === null) print "foo is null!/n";
Esto es cierto si $foo
es NULL
, pero no si es false
, cero, ""
, etc.
Siempre agrego a mi base de código
function is_blank($value) {
return empty($value) && !is_numeric($value);
}
y usarlo en lugar de empty (). Resuelve el problema de mantener los ceros (int, float o string) como no vacíos.
Consulte http://www.php.net/manual/en/function.empty.php#103756 que se agregó en mayo de 2011.
Utilicé la función ord
para comprobar que el valor pasado estaba vacío o no.
/*
* SPACE is not empty - Please do trim before using this function for your own purpose
* var_dump(is_having_value(0)); // true
var_dump(is_having_value(0000)); // true
var_dump(is_having_value(" 0")); // true
var_dump(is_having_value("")); // false
var_dump(is_having_value(" ")); // true
var_dump(is_having_value(''/t'')); // true
var_dump(is_having_value('''')); // false
var_dump(is_having_value(''o'')); // true
var_dump(is_having_value(''O'')); // true
var_dump(is_having_value(''0'')); //true
var_dump(is_having_value(null)); //false
var_dump(is_having_value()); //false
*/
function is_having_value($val = null) {
if (is_array($val) || is_object($val)):
$logic_empty = empty($val);
return !$logic_empty;
else:
$ascii = ord($val);
if ($ascii == 48 || $ascii = 0 || $ascii == 32):
return true;
else:
$logic_empty = empty($val);
return !$logic_empty;
endif;
endif;
}
Yo uso esto para detectar el vacío:
'''' --> true
''0'' --> false
0 --> false
la función:
function is_empty_or_zero($str) {
return (is_null($str) || ($str === ''''));
}
IsEmpty()
un IsEmpty()
una función rápida y concisa.
function IsEmpty($mData) {
return is_int($mData) ? false :
is_string($mData) ? $mData=="" :
empty($mData);
}
if ( is_int($val) || !empty($val) ) {;}