Come eliminare "®" e "™" in una stringa?
-
18-09-2019 - |
Domanda
Ho una stringa simile "Welcome to McDonalds®: I'm loving it™"
...Voglio sbarazzarmi di ":"
, "'"
, ®
E ™
simboli.Finora ho provato quanto segue:
$string = "Welcome to McDonalds®: I'm loving it™";
$string = preg_replace('/[^a-zA-Z0-9 -]/', '', $string);
Ma sull'output ricevo:
"Welcome to McDonaldsreg Im loving ittrade"
...COSÌ preg_replace
in qualche modo si converte ®
A 'reg'
E ™
A 'trade'
, il che non va bene per me e non riesco a capire perché avvenga una tale conversione.
Come posso eliminare questa conversione?
Risolto: Grazie per le idee, ragazzi.Ho risolto il problema:
$string = preg_replace(
array('/[^a-zA-Z0-9 -]/', '/&[^\s]*;/'),
'',
preg_replace(
array('/&[^\s]*;/'),
'',
htmlentities($string)
)
);
Soluzione
Probabilmente stai avendo i caratteri speciali in , cioè ® è davvero ®
nella stringa. Quindi non è visto da l'operazione di sostituzione.
Per risolvere questo problema, è possibile filtrare per il & QUALCOSA; sottostringa, e rimuoverli. Ci potrebbero essere i metodi built-in per fare questo, forse html_entity_decode .
Altri suggerimenti
Se si sta cercando di sostituire solo i personaggi citati, utilizzare
$cleaned = str_replace(array('®','™','®','™', ":", "'"), '', $string);
metodi di sostituzione stringa regolare di solito sono più veloci e non c'è niente nel tuo esempio che si desidera sostituire che avrebbe bisogno il potere pattern matching del motore delle espressioni regolari.
EDIT a causa di commenti: Se è necessario sostituire i modelli dei personaggi (come indicato dalla soluzione che ti sei dato), un Regex è infatti più appropriato e pratica.
Inoltre, sono sicuro che McD richiede che entrambi i simboli per essere a posto se questo slogan viene utilizzato su qualsiasi sito web pubblico
® è ®
, e ™ lo è ™
.Pertanto, ti consigliamo di rimuovere tutto ciò che segue
Il modello &[#0-9a-z]+;
in anticipo:
$input = "Remove all ™ and ® symbols, please.";
$string = preg_replace("/&[#0-9a-z]+;/i", "", $input);