Replaces 'ill-formed' byte sequences with '?'.
See: https://github.com/php/php-src/pull/1099(PHP 7 >= 7.2.0, PHP 8)
mb_scrub — Reemplaza las secuencias de bytes mal formadas por el carácter de sustitución.
Realiza una conversión de juego de caracteres desde la codificación especificada, o desde la codificación por omisión si no se ha especificado ninguna, hacia la misma codificación. Esto tiene como efecto reemplazar cualquier secuencia de bytes inválida por el carácter de sustitución.
stringLa cadena de entrada.
encoding
La codificación utilizada para interpretar string.
Si se omite o es null, el
parámetro mbstring.internal_encoding
será utilizado si está definido, de lo contrario el parámetro default_charset
será utilizado.
El resultado string con las secuencias de bytes inválidas reemplazadas.
| Versión | Descripción |
|---|---|
| 8.0.0 |
encoding ahora acepta null.
|
Ejemplo #1 Reemplazo a nivel de byte realizado por mb_scrub()
Aquí se utiliza bin2hex() porque los terminales, navegadores y fuentes pueden renderizar una secuencia de bytes mal formada con un carácter de sustitución propio, ocultando lo que la cadena contiene realmente.
<?php
// El byte 0xFF no puede aparecer en una cadena UTF-8 válida.
$input = "A\xFFB";
echo bin2hex($input), "\n";
// El carácter de sustitución por defecto es "?" (0x3F).
echo bin2hex(mb_scrub($input, 'UTF-8')), "\n";
// U+FFFD REPLACEMENT CHARACTER se codifica como EF BF BD en UTF-8.
mb_substitute_character(0xFFFD);
echo bin2hex(mb_scrub($input, 'UTF-8')), "\n";
?>El ejemplo anterior mostrará:
41ff42 413f42 41efbfbd42
Ejemplo #2 Usar mb_scrub() antes de un procesamiento consciente de UTF-8
Los patrones PCRE con el modificador u rechazan los sujetos que
no son UTF-8 bien formado. Limpiar la entrada primero la hace aceptable.
<?php
$input = "A\xFFB";
var_dump(preg_match_all('/./us', $input));
echo preg_last_error_msg(), "\n";
$clean = mb_scrub($input, 'UTF-8');
var_dump(preg_match_all('/./us', $clean));
?>El ejemplo anterior mostrará:
bool(false) Malformed UTF-8 characters, possibly incorrectly encoded int(3)
Replaces 'ill-formed' byte sequences with '?'.
See: https://github.com/php/php-src/pull/1099