PHP Unsichtbare Zeichen: %E2%80%8E

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

EuroCent

Klappstuhl 2.0

Ja das hab Ich schon genutzt.
Das ergebnis bleibt daher das selbe.

Ich arbeite absolut ohne javascript,ajax,jQuery usw.
aber Du hast noch immernicht den DB auszug, und deinen Weg zum speichern in eine DB gepostet.

Nichts für ungut, aber der Eintrag in die DB ist nicht das Problem.
Sondern vorweg die Codierung.

Daher ist es nicht notwendig dir einen Auszug zu schicken.

Wie gesagt das Feld in der DB ist als datetime deklariert.

PHP:
<?php
$sql = "INSERT INTO [dbo].[tabelle] ([catalog_date]) VALUES(?)";
$params = array($_REQUEST['catalogexpiredFrom']);
$stmt = sqlsrv_prepare($msconnect, $sql, $params);
sqlsrv_execute($stmt);
sqlsrv_free_stmt($stmt);
?>
 

ComFreek

Mod | @comfreek
Moderator
Ich vermute, dass der Browser dieses Zeichen einfügt. Überprüfe doch mal, ob nach Veränderung der Eingabe (manuell mittels Tastatur) der Wert des Eingabefeldes das left-to-right-mark enthält. Etwa via hexEncode(document.getElementById('catalogexpiredFrom').value), wobei du dir hexEncode irgendwo aus dem Internet ziehen müsstest, z. B. von Javascript: Unicode string to hex.

Was spricht dagegen ein <input>-Feld vom type="date" zu benutzen? Ich würde stark vermuten, dass da der Browser so etwas nicht einfügen würde.

Nebenbei: wenn dein <input>-Feld type="text" hat, machen dann die Attribute "min" und "max" überhaupt noch Sinn -- geschweige denn sind erlaubt?
 

EuroCent

Klappstuhl 2.0
Ich vermute, dass der Browser dieses Zeichen einfügt. Überprüfe doch mal, ob nach Veränderung der Eingabe (manuell mittels Tastatur) der Wert des Eingabefeldes das left-to-right-mark enthält. Etwa via hexEncode(document.getElementById('catalogexpiredFrom').value), wobei du dir hexEncode irgendwo aus dem Internet ziehen müsstest, z. B. von Javascript: Unicode string to hex.

Das werde Ich mir morgen anschauen :)
Sieht zumindestens sehr viel versprechend aus. :)

Vielen Dank :D

Was spricht dagegen ein <input>-Feld vom type="date" zu benutzen? Ich würde stark vermuten, dass da der Browser so etwas nicht einfügen würde.

Leider verwenden wir noch den IE11 und der nimmt zwar das date-Attribute aber baut es als en-GB das Datum um (2020-06-07).
Das irritiert aber viele, da der Chrome welcher Alternative unterstützt wird, macht.

Sobald der neue Edge draußen ist, wird dieser für das Unternehmen entsprechend Verwendet.
Dann ist die alternative zu Chrome dann auch hinfällig :D

Daher hab Ich es aktuell in text umgestellt damit es nicht zu Problemen führt. :)

Nebenbei: wenn dein <input>-Feld type="text" hat, machen dann die Attribute "min" und "max" überhaupt noch Sinn -- geschweige denn sind erlaubt?

Macht natürlich null Sinn, an der Stelle hab Ich es nur versäumt, es entsprechend zu entfernen.
Das wird natürlich noch entfernt. :)
 

ComFreek

Mod | @comfreek
Moderator
Ich verstehe! Wenn es tatsächlich der Browser ist, würde ich das clientseitig mit String.prototype.trim() aus dem inputField.value entfernen. Ich würde sowieso empfehlen, clientseitig sowie serverseitig das eingegebene Datum zu validieren.
 

EuroCent

Klappstuhl 2.0
Ich verstehe! Wenn es tatsächlich der Browser ist, würde ich das clientseitig mit String.prototype.trim() aus dem inputField.value entfernen. Ich würde sowieso empfehlen, clientseitig sowie serverseitig das eingegebene Datum zu validieren.

Naja ist halt die Frage ob er diese Zeichen ebenfalls entfernt. :)

Ich werde es dennoch versuchen :)
Bin zwar nicht sicher, aber glaube dass Ich dies bereits gemacht hatte. :)
Aber egal... auf ein neues :D
 

ComFreek

Mod | @comfreek
Moderator
Oh, tatsächlich werden die mit trim() oder Regex \s nicht gematched und entfernt:
Javascript:
"\u200e".trim().length // result: 1
"\u200e".replace(/^\s*/g, "").length // result: 1

Dann müsstest du U200E (oder gleich eine umgebende Range*) explizit im Regex vermerken.

* zum Beispiel ist der Right-to-Left-Mark mit U200F direkt daneben.
 

EuroCent

Klappstuhl 2.0
Oh, tatsächlich werden die mit trim() oder Regex \s nicht gematched und entfernt:
Javascript:
"\u200e".trim().length // result: 1
"\u200e".replace(/^\s*/g, "").length // result: 1

Dann müsstest du U200E (oder gleich eine umgebende Range*) explizit im Regex vermerken.

* zum Beispiel ist der Right-to-Left-Mark mit U200F direkt daneben.

Okay dann ist meine Lösung schon bereits eingebunden gewesen.
Denn mit regex habe Ich es bereits php seitig gelöst. :)
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge