¿Como eliminar espacios en blanco (caracter especial)?

  • Autor Autor Magali Mejia
  • Fecha de inicio Fecha de inicio
M

Magali Mejia

Programador
No recomendado
Verificado por Whatsapp
Hola, recientemente me esta pasando un problema que nunca me habia pasado. me da mucha lata preguntar en stackoverflow por sus reglas y bla bla.

El problema es el siguiente:
necesito remover los espacios del siguiente string, el problema es que lleva un caracter invisible al final:

Insertar CODE, HTML o PHP:
АЙСКРИН - МЕЖДУ НАМИ ️

si uso str_replace(" ","-",$str); obtengo lo siguiente:

Insertar CODE, HTML o PHP:
АЙСКРИН---МЕЖДУ-НАМИ ️

Si se fijan el espacio del final del string no es un espacio cualquiera, me paraece que es un carácter unicode al cual no se como llegar para eliminarlo del string

El espacio del final no se reemplaza ya que es un carácter especial, necesito usar preg_replace para no solo eliminar este "espacio en blanco" sino todo carácter que sea parecido a el, como este por ejemplo: -️ (que parece un guion común, pero no lo es).
 
Última edición:
intenta con trim
Insertar CODE, HTML o PHP:
<?php
$a = trim("АЙСКРИН---МЕЖДУ-НАМИ "," \t\n\r");
echo $a;
?>
 
intenta con trim
Insertar CODE, HTML o PHP:
<?php
$a = trim("АЙСКРИН---МЕЖДУ-НАМИ "," \t\n\r");
echo $a;
?>

Gracias por intentar ayudar, estas usando un espacio común al final del string, logicamente va a funcionar, si usas mi string tal como esta (copialo y pegalo), no funcionara, repito no es un espacio en blanco, es un caracter unicode.

intenta correr esto

Insertar CODE, HTML o PHP:
<?php
$a = trim("АЙСКРИН---МЕЖДУ-НАМИ ️"," \t\n\r");
echo $a;
?>

no habrán cambios.

Sigo recibiendo ideas.
 
Y si simplemente tomas la cadena y eliminas el último caracter? Y después si necesitas algo en ese espacio lo añades?
 
Dime para que es bro.
O en ese caso podrias ponerlo haci

PHP:
$str = "АЙСКРИН - МЕЖДУ-НАМИ ";

echo str_replace(array(" - ", "---"), array("-", "-"), $str);

echo "<br>";
//Solucion más practica para quitar el espacio final o cualquier otro caracter.
echo rtrim($str, " ");
:
 
Y si simplemente tomas la cadena y eliminas el último caracter? Y después si necesitas algo en ese espacio lo añades?
y si el ultimo caracter es una x por ejemplo ?, lo eliminaria. No tiene sentido

Dime para que es bro.
O en ese caso podrias ponerlo haci

PHP:
$str = "АЙСКРИН - МЕЖДУ-НАМИ ";

echo str_replace(array(" - ", "---"), array("-", "-"), $str);

echo "<br>";
//Solucion más practica para quitar el espacio final o cualquier otro caracter.
echo rtrim($str, " ");
:
parece que nadie lee que no es un espacio en blanco común, es decir, es un espacio común pero lleva un caracter invisible al final :s

En fin, llege a una solucion salomonica.
decidi usar urlencode

string original:
Insertar CODE, HTML o PHP:
АЙСКРИН - МЕЖДУ НАМИ ️

String con urlencode:
Insertar CODE, HTML o PHP:
%D0%90%D0%99%D0%A1%D0%9A%D0%A0%D0%98%D0%9D%20-%20%D0%9C%D0%95%D0%96%D0%94%D0%A3%20%D0%9D%D0%90%D0%9C%D0%98%20%EF%B8%8F️

Los espacios en blanco con urlencode es igual a: %20
Si se dan cuenta el espacio del final es igual a: %20%EF%B8%8F️

Se dieron cuenta que sobra ?, si %EF%B8%8F️

Ahora si uso este string:
Insertar CODE, HTML o PHP:
hola-soy-magali-️
(que al final parece tener un guion común, pero no lo es)

string con urlencode
Insertar CODE, HTML o PHP:
hola-soy-magali-%EF%B8%8F
que sobra ?, si %EF%B8%8F️

Esto puede suceder con cualquier carácter según veo ya que se agrega como un carácter invisible, me hubiese gustado usar preg_replace, pero ya logre lo que queria.

Entonces, la solución:

Insertar CODE, HTML o PHP:
$string = "АЙСКРИН - МЕЖДУ НАМИ ️";
$string = urlencode($str);
$string = urldecode(str_replace("%EF%B8%8F","",$tit));
echo $string;


Gracias por leer.
 
Última edición:
Ciertamente como dices podrías usar `preg_replace`. Yo personalmente haría algo así:

PHP:
<?php

echo '<pre>';

$string = 'АЙСКРИН - МЕЖДУ НАМИ ️';

var_dump($string);

$string = preg_replace('@[\s\ ️]+@i', '-', $string);

var_dump($string);

El resultado sería el siguiente:

[code
HTML:
string(40) "АЙСКРИН - МЕЖДУ НАМИ ️"
string(37) "АЙСКРИН---МЕЖДУ-НАМИ-"
 
Ciertamente como dices podrías usar `preg_replace`. Yo personalmente haría algo así:

PHP:
<?php

echo '<pre>';

$string = 'АЙСКРИН - МЕЖДУ НАМИ ️';

var_dump($string);

$string = preg_replace('@[\s\ ️]+@i', '-', $string);

var_dump($string);

El resultado sería el siguiente:

[code
HTML:
string(40) "АЙСКРИН - МЕЖДУ НАМИ ️"
string(37) "АЙСКРИН---МЕЖДУ-НАМИ-"

El regex correcto para usar preg_replace seria el siguiente:

Insertar CODE, HTML o PHP:
$string ="⁠maddix";

$string = preg_replace('/[x00-x08x0Bx0Cx0E-x1Fx7F-x9F]/u', '', $string);

echo $string;
 
Probaste asi?:

Insertar CODE, HTML o PHP:
$string=preg_replace('/\xEF\xB8\x8F/', '', $string);
 
Atrás
Arriba