Copy/Paste-Problem Web-Console und Pro-Console UTF-8-Thema?

Aktuell programmiere ich wieder etwas mehr in der Pro-Console und muss feststellen, dass das Kopieren von Code-Schnipseln aus dem Web-Browser nicht mehr funktioniert.

Was genau meine ich? Ich kopiere z.B. folgenden Code-Schnipsel in ein PHP-Script in der Console oder Pro-Console

class Employee
{
  private $first_name;
  private $last_name;
  private $age;
  
  public function __construct($first_name, $last_name, $age)
  {
    $this->first_name = $first_name;
    $this->last_name = $last_name;
    $this->age = $age;
  }
 
  public function getFirstName()
  {
    return $this->first_name;
  }
 
  public function getLastName()
  {
    return $this->last_name;
  }
 
  public function getAge()
  {
    return $this->age;
  }
}

Wenn ich das Script dann ausführe, kommt folgende Fehlermeldung

Parse error: syntax error, unexpected '  private' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST) in /var/lib/symcon/scripts/30409.ips.php on line 26

Wenn ich den ganzen Schnipsel dann eins zu eins abschreibe und den kopierten Schnipsel lösche, dann ist der Fehler weg.

Das Problem hatte ich bisher nie. Ich gehe mal davon aus, dass hier unsichtbare Zeichen (Leerzeichen?, Tabs?) anders als erwartet interpretiert werden. Wäre schön, wenn das wieder funktionieren würde.

@Dr.Niels kannst du da mal draufgucken?

Grüße
Jürgen

Das kann ich bei mir leider nicht nachstellen. Ich habe dein Skript genommen und bei mir reinkopiert. Das Ergebnis habe ich dann aus der webbasierten Konsole in eine Pro-Konsole kopiert, einmal via Tastaturkürzel und einmal via Kontextmenü. Es hat in beiden Fällen super geklappt.

Was für einen Browser verwendest du? Kopierst du via Kontextmenü oder Tastaturkürzel? Kannst du mal in der Datei schauen, was da reingerutscht ist oder mir die mal schicken?

Ich nutze Firefox unter Linux und kopiere sowohl mit Tastenkürzel als auch mit Kontextmenü. In allen Kombinationen das gleiche Ergebnis.
Und jetzt wird es wirklich spannend. Ich habe eben meinen Code-Schnipsel hier aus dem Forum in die Console eingefügt. Und tatsächlich, auch bei mir funktioniert es ohne Fehlermeldung.
Wenn ich allerdings ein Codebeispiel von php.net einfüge, kommt die Fehlermeldung.
Hier mein Beispiel
Da kann ich aber auch beliebige andere von anderen Seiten nehmen.

Ich habe jetzt noch ein bisschen weiter gesucht und den fraglichen Text mal als hex-Code ausgegeben. Heraus kam, dass „C2A0“ nicht richtig interpretiert werden kann. Das scheint ein bekanntes Problem zu sein (siehe hier).

Den Code von php.net konnte ich bei mir auch einfügen… Merkwürdig… Aber dann vermute ich mal, dass der von dir kopierte Text einfach die problematischen Leerzeichen beinhaltete.

ja genau. Kannst du da etwas machen?

Da sehe ich wenig Möglichkeiten etwas zu tun. Insbesondere bei Verwendung von Tastenkürzeln kann ich gar nicht auf den Inhalt der Zwischenablage zugreifen und somit auch nicht filtern. Und das mal so und mal so anzugehen würde ich auch als unschön empfinden. Daher musst du wohl leider selbst darauf achten, dass du sauberen Inhalt in den Skripteditor reinkopierst.

hm, das ist aber doof. Spannenderweise gab es das Problem vor eurer UTF-8-Umstellung nicht. Kann also eigentlich nicht am Copy/Paste-Vorgang liegen.
Kannst du euren Code-Interpreter nicht dahingehend erweitern, dass „C2A0“ als „20“ interpretiert wird?

Kannst du mir nochmal ausführlich deinen Aufbau erörtern, also auch welches System, welchen Browser, welchen Text kopierst du genau und wie etc.? Dann würde ich nochmal versuchen, das bei mir nachzustellen.

Ich bin halt nicht sicher, ob es immer und in jedem Falle korrekt ist, diese Anpassung vorzunehmen. Vielleicht gibt es Situationen, in denen ein Benutzer sehr wohl dieses Zeichen möchte, weil es vielleicht von einer API verwendet wird oder dergleichen? Der hätte dann keine Möglichkeit mehr daran zu kommen. Wenn auf der anderen Seite ein Benutzer nunmal das falsche Zeichen kopiert und einfügt, dann kann er das leicht beheben (Wenn er herausgefunden hat, was los ist).

Was ich mir sonst aber vorstellen könnte, wäre eine irgendwie geartete Meldung, wenn im Text nicht-Standard-Leerzeichen beinhaltet sind, mit einem aktiven Klick zum beheben. Benutzt dann jemand bewusst das Zeichen (selten, aber möglich), klickt er halt nicht darauf, weil er das Zeichen ja bewusst haben möchte. Wenn jetzt aus Versehen die falschen Leerzeichen reinkommen und die Meldung auftaucht, würde man darauf klicken, weil man ja keine exotischen Leerzeichen möchte.

Hallo Niels,
danke für deine ausführliche Antwort und dass du dich weiter mit dem Thema beschäftigst.

Ich nutze einen AMD64 mit Debian Bullseye und Firefox V107.
Ich kopiere z.B. eine Code-Snipsel von php.net, wie oben beschrieben. Dabei ist es für das Ergebnis völlig egal, ob ich die Tastenkürzel oder die rechte Maustaste verwende.

Das finde ich als Lösung sehr gut. Eine Auto-Korrektur ist gar nicht unbedingt erforderlich, solange auf die Nicht-Standard-Zeichen hingewiesen wird. Ich habe in der Richtung noch ein bisschen weitergeguckt. VS-Code handhabt das z.B. so:
grafik
Die Nicht-Standard-Zeichen werden besonders hervorgehoben. Auf diese Weise sieht man sofort das Problem und kann es selbst beheben. Die Fehlermeldungen in der Console sind da meist sehr irreführend und man sucht sich einen Wolf nach dem eigentlichen Problem.