2015-08-14 9 views
8

Ho visto altre soluzioni here e here, ma non funziona per me.Come rimuovere il trattino 'em' da una stringa?

Codice

$s1clean = 'ALIEN - FILM - MOVIE – PSP – Sony - Boxed & Complete'; 
echo $s1clean; 
echo "<br><br>"; 

// Remove dash 
$s1clean = str_replace('-', '', $s1clean); 

// Remove em dash 
$em_dash = html_entity_decode('&#x2013;', ENT_COMPAT, 'UTF-8'); 
$s1clean = str_replace($em_dash, '', $s1clean); 

$em_dash2 = html_entity_decode('&#8212;', ENT_COMPAT, 'UTF-8'); 
$s1clean = str_replace($em_dash2, '', $s1clean); 

$s1clean = str_replace('\u2014', '', $s1clean); 

echo $s1clean; 
echo "<br><br>"; 

uscita

"movie film ALIEN - PSP - Sony Boxed & Complete"

Come rimuovo questo personaggio?

+0

Altre spiegazioni su tipi di trattini, endash è quello breve, emdash è quello lungo - > Non confondere il trattino (-) per il trattino un po 'più stretto (-) o il trattino ancora più stretto (-). Questi marchi hanno scopi diversi e sono ulteriormente spiegati in altre sezioni. [link] (http://www.thepunctuationguide.com/em-dash.html) – Mousey

risposta

7

Specifica una serie di possibili rimozioni,

$s1clean = 'ALIEN - FILM - MOVIE – PSP – Sony - Boxed & Complete'; 

$s1clean = str_replace(["-", "–"], '', $s1clean); 

echo $s1clean; 

Quando correva,

Ouput

ALIEN pellicola di film PSP Sony Boxed & completa

ho semplicemente copiato il strano trattino e lo ha aggiunto con la possibilità del cruscotto effettivo e ha funzionato.

materiale di lettura

str_replace

+0

Grazie, ma quando lo copio nel mio editor lo converte in un trattino, quindi non posso fare quel trucco. – user3314053

+1

Utilizza un altro editor. – GolezTrol

+0

@ user3314053 Non sono sicuro di come rispondere a questo. Non so perché un editore lo cambierebbe, posso solo suggerire cosa ha detto il commento sopra. – Script47

2

vostri trattini sono un mix di trattino e hypen-minus (breve trattino) - -se si visualizza il codice e il titolo in un font diverso si vuole vedi la differenza.

All'avvio ci sono 2 trattini corti che il codice rimuove e alcuni trattini più tardi che non rimuove.

L'aggiunta di questo sarà risolvere il problema (questo è un trattino diversa, anche se non sembra uno):

$s1clean = str_replace('–', '', $s1clean); 

Modifica

alternativa duplicare la linea di codice 2013, ma utilizzare il hyphen-minus's code002D invece del 2013:

$em_dash = html_entity_decode('&#x002D;', ENT_COMPAT, 'UTF-8'); 

Se si modifica in un carattere a larghezza fissa sia visualizzata la stessa ma non lo sono

+0

'In alternativa, duplica la riga del codice 2013 ma usa il codice dell'altro trattino 2014 anziché 2013'. Cosa ti fa assumere il carattere dato '-' è l'entità '& # x2014'? Questa è una supposizione errata. –

+0

@HalimQarroum non è un'ipotesi, vedi il link che ho postato con i codici esadecimale e decimale. – Mousey

+0

No. Interpretato come 'UTF-8', il carattere inserito dall'OP è il carattere 'EN DASH' (U + 2013), noto come' & # x2013; 'entità, o' – '. Puoi confrontarli qui http://www.fileformat.info/info/unicode/char/2013/browsertest.htm. –

3

È possibile che questo non ha funzionato per me, ma questo ha fatto:

$s1clean = str_replace(chr(151), '', $s1clean); // emdash 

Nota: per l'utilizzo endash

$s1clean = str_replace(chr(150), '', $s1clean); // endash 

da Jay: http://php.net/manual/en/function.str-replace.php#102465

+1

Questa dovrebbe essere la risposta corretta. –

1

Questo funziona per me

$title = "Hunting, Tactical & Outdoor Optics eCommerce Store ΓÇô $595,000 ΓÇö SOLD"; 
$title = str_replace(html_entity_decode('&ndash;', ENT_COMPAT, 'UTF-8'), '-', $title); 
$title = str_replace(html_entity_decode('&mdash;', ENT_COMPAT, 'UTF-8'), '-', $title); 
Problemi correlati