2009-12-18 7 views
8

Sto provando a rimuovere LEFT-TO-RIGHT-MARK (\ u200e) e RIGHT-TO-LE-LE-MARK (\ u200f) da una stringa prima della codifica è come JSON. Nessuno dei seguenti sembra funzionare:Come rimuovere i caratteri unicode (LEFT_TO_RIGHT_MARK) da una stringa in php

$s = mb_ereg_replace("\u200e", '', $s); 
$s = preg_replace("#\u200e#u", '', $s); 
$s = preg_replace("#\u200e#", '', $s); 

Qualsiasi aiuto è apprezzato!

+0

In quale codifica è inserita la stringa? – troelskn

risposta

0

Hai provato a codificare il file di script in UTF-8 e in effetti a digitare (o copiare + incollare) i caratteri lì dentro?

0

Che dire di usare str_replace e codificare quel carattere usando i suoi codici di caratteri; qualcosa di simile, forse:

$new_string = str_replace("\x20\x0f", "", $your_string); 

E, nel tuo caso, come si dispone di diversi caratteri diversi da sostituire, si potrebbe tutti sostituire in una chiamata a str_replace:

$new_string = str_replace(
    array(
     "\x20\x0e", 
     "\x20\x0f", 
    ), 
    array(
     "", 
     "", 
    ), 
    $your_string 
); 

funziona per il tuo problema ?

5

tua fuga Unicode è sbagliato, questo dovrebbe funzionare:

preg_replace('/\x20(\x0e|\x0f)/', '', $string) 

prova:

<?php 
    $string = chr(0x20) . chr(0x0e) . 'fo' . chr(0x20) . chr(0x0e) . 'o' . chr(0x20) . chr(0x0f); 
    echo $string . "\n"; 
    echo preg_replace('/\x20(\x0e|\x0f)/', '', $string); 
?> 

In alternativa, utilizzare str_replace():

str_replace(array("\x20\x0e", "\x20\x0f"), '', $string); 
+0

Perché 'str_replace' non funziona? – Asaph

+0

in realtà, funziona. il mio test era mal concepito. risposta aggiornata per includere str_replace(). potrebbe probabilmente usare anche strtr(). – tmont

+0

Che cosa è esattamente x xe? – iankit

0

Potrebbe provare questo? la sua codifica utf8 di 200e e 200f

$s=preg_replace('/\xe2\x80[\x8e\x8f]/', '', $s) 

o con str_replace

$s=str_replace("\xe2\x80\x8e", "", $s); 
$s=str_replace("\xe2\x80\x8f", "", $s); 
0

provare questo

preg_replace('/\x{E2}\x{80}\x{8E}/', '', $s); 
// strip unicode chars (LEFT_TO_RIGHT_MARK) 
5

Dopo aver lottato con questo problema per un paio di giorni, ho finalmente trovato la risposta !

$str = preg_replace('/(\x{200e}|\x{200f})/u', '', $str); 
+0

ha funzionato per me dove la risposta di @ tmont (con voti più alti) non ha – roryok

Problemi correlati