2016-01-27 53 views
5

Ho difficoltà ad associare due stringhe di testo. Uno contiene alcuni caratteri nascosti da una stringa di testo.Come rimuovere i caratteri nascosti dalla stringa di testo in PHP?

Ho una stringa di testo: "PR & Communications" memorizzata su un database SQL. Quando viene estratto da lì, in $database_version, var_dump($database_version) rivela che la stringa contiene 19 byte.

Ho raschiato (con autorizzazione) da un sito Web, del testo in una variabile, $web_version. Apparentemente la stringa è "PR & Communications" ma non corrisponde alla versione del database, cioè if($database_version == $web_version) NON è vero.

var_dump() rivela $web_version per avere 23 byte. trim() non ha effetto, né strip_tags() ma preg_replace('/[^\PC\s]/u', $web_version) rimuove qualcosa perché in seguito string_var($web_version) rivela la stringa per comprendere solo 14 byte. Ha rimosso chiaramente qualcosa, forse troppo, poiché la stringa non corrisponde ancora allo $database_version.

Delle idee come:

  1. scoprire cosa è stato rimosso
  2. striscia fuori quel tanto che basta per abbinare $ Database_Version?

PS Non so come visualizzare la variabile nel codice esadecimale

+0

Wen il tuo tentativo di confrontare _if ($ database_version == $ web_version) _ entrambe le variabili stanno arrivando in formato stringa? Prova con alcuni metodi di tipizzazione e di rifinitura. – Drone

+1

Puoi provare a usare 'utf8-decode ($ web_version)' - http://php.net/manual/en/function.utf8-decode.php. – Scott

+1

debug: per vedere la stringa come byte esadecimali utilizzare 'var_dump ($ web_version, bin2hex ($ web_version), __FILE __.__ LINE __);'. Per vedere cosa rappresenta il personaggio, quindi: [Tabella e descrizione ASCII] (http://www.asciitable.com/) e [Elenco caratteri completo per UTF-8] (http://www.fileformat.info/info/charset /UTF-8/list.htm) –

risposta

2
$trimmedVal = preg_replace("/\s+|[[:^print:]]/, "", $value) 

assetto() rimuove solo "\ t \ n \ r \ 0 \ x0B" (vedi docs), in modo da usa lo snippet qui sopra per rimuovere i caratteri non stampati dalla stringa.

+0

questo mi ha aiutato a risolvere un problema leggermente diverso. Forse potresti chiarire su caratteri non stampati e cosa fa effettivamente questa regex? –

+0

'[[: print:]]' è la classe di caratteri di stampa PCRE (alias per regex complesso, più di loro: http://php.net/manual/en/regexp.reference.character-classes.php) sintassi. Stampa carattere significa visibile sul rendering della pagina. Il simbolo '^' all'interno della classe o del gruppo di caratteri significa negazione, quindi '[[:^print:]]' indica il carattere non stampabile - quelli che non sono visibili dopo il rendering della pagina (come il contrassegno BOM, ad esempio). Altre parti di regex sono molto semplici: '\ s' sta per" qualsiasi simbolo di spazio ", (spazio, tabulazione, nuova riga, ecc.),' + 'Significa" ripeti una o più volte ", pipe (' | ') significa "o". –

+0

Quindi, nel suo insieme, può essere letto come "trova qualsiasi simbolo di spazio o carattere non stampabile". –

Problemi correlati