2016-01-27 2 views
5

Ich habe Schwierigkeiten, zwei Textzeichenfolgen übereinzustimmen. Einer enthält einige versteckte Zeichen aus einer Textzeichenfolge.Wie versteckte Zeichen aus Textzeichenfolge in PHP entfernen?

Ich habe eine Textzeichenfolge: "PR & Communications" in einer SQL-Datenbank gespeichert. Wenn sie von dort in $database_version gezogen wird, enthüllt var_dump($database_version) die Zeichenfolge, 19 Byte zu haben.

Ich habe (mit Erlaubnis) von einer Website geschabt, etwas Text in eine Variable, $web_version. Anscheinend ist die Zeichenfolge "PR & Communications", aber sie stimmt nicht mit der Datenbankversion überein, d. H. if($database_version == $web_version) ist NICHT wahr.

var_dump() zeigt $web_version zu 23 Bytes haben. trim() hat keinen Effekt, noch strip_tags(), aber preg_replace('/[^\PC\s]/u', $web_version) entfernt etwas, weil hinterher string_var($web_version) enthüllt, dass die Zeichenfolge nur 14 Bytes umfasst. Es hat eindeutig etwas entfernt, möglicherweise zu viel, da die Zeichenfolge immer noch nicht mit $database_version übereinstimmt. zu

Irgendwelche Ideen, wie:

  1. herauszufinden, was
  2. Streifen aus gerade genug entfernt wurde $ Database_Version zu passen?

PS Ich weiß nicht, wie die Variable in Hexadezimal-Code anzuzeigen

+0

Wenn Sie versuchen, _if ($ database_version == $ web_version) zu vergleichen _ sind beide Variablen im String-Format? Versuchen Sie es mit etwas Typumwandlung und Trimmen. – Drone

+1

Sie können versuchen mit 'utf8-decode ($ web_version)' - http://php.net/manual/en/function.utf8-decode.php. – Scott

+1

Debugging: Um den String als Hex-Bytes zu sehen, verwenden Sie 'var_dump ($ web_version, bin2hex ($ web_version), __FILE __.__ LINE __);'. Um zu sehen, was das Zeichen darstellt, dann: [ASCII Tabelle und Beschreibung] (http://www.asciitable.com/) und [Vollständige Zeichenliste für UTF-8] (http://www.fileformat.info/info/charset /UTF-8/list.htm) –

Antwort

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

trim() entfernt nur "\ t \ n \ r \ 0 \ x0B" (siehe docs), so Verwenden Sie das obige Snippet, um nicht gedruckte Zeichen aus der Zeichenfolge zu entfernen.

+0

Dies half mir, ein etwas anderes Problem zu lösen. Vielleicht könnten Sie über nicht gedruckte Zeichen klären und was diese Regex tatsächlich tut? –

+0

'[[: print:]]' ist PCRE print Zeichenklasse (Alias ​​für komplexe Regex, mehr davon: http://php.net/manual/en/regexp.reference.character-classes.php) Syntax. Druckzeichen bedeutet sichtbar beim Seitenrendern. '^' Symbol innerhalb der Zeichenklasse oder Gruppe bedeutet Negation, also '[[:^print:]]' bedeutet nicht druckbares Zeichen - Zeichen, die nach dem Rendern der Seite nicht sichtbar sind (wie zB BOM-Markierung). Andere Teile von Regex sind sehr einfach - '\ s' steht für" beliebige Leerzeichen ", (Leerzeichen, Tabulator, neue Zeile, etc.),' + 'Bedeutet" wiederhole ein oder mehrere Male ", pipe (' | ') bedeutet "oder". –

+0

Also, als Ganzes könnte es gelesen werden als "finden Sie ein Leerzeichen Symbol oder nicht druckbare Zeichen". –