Я исследую проблему, когда браузер отправляет данные в Apache (2.4) / PHP (7.2 Mac) и PHP не может декодировать некоторые байты в печатный символ. Символом является '-' (шестнадцатеричное значение 2D задается, когда символ копируется и вставляется в https://www.online -toolz.com / tools / text-hex-convertor.php и шестнадцатеричный ASCII, переведенный здесь - https://ascii.cl/), но отображается как в PHP.
MariaDB отображает точный символ и сообщает о длине значения столбца источника данных как 250 символов. Данные собираются PHP PDO и передаются в форму HTML и используются в качестве значения для формы ввода текста. Символ отлично отображается в HTML-дом. Однако, когда данные POST отправляются обратно через Apache в PHP, PHP говорит, что длина строки составляет 251 символ, а затем нарушает моющее средство очистки длины строки.
Я нашел короткую команду Python, чтобы увидеть двоичный файл. Я скопировал и вставил персонажа из Sequel Pro
и вставил его в этот скрипт.
import binascii
bin(int(binascii.hexlify('-'), 16))
'0b101101'
История кодировки такова, что она была из документа Google Docs, загруженного как .txt, открытого в Mac Text Edit и сохраненного с кодировкой UTF-8, затем переданного через python в базу данных MySQL, обратно через PHP в HTML и отправлены обратно в PHP.
Я заменил символ в базе данных другим символом '-' (шестнадцатеричное значение e28093) с двоичным выводом ниже, и все работает отлично.
bin(int(binascii.hexlify('–'), 16))
'0b111000101000000010010011'
Есть идеи, почему PHP не может правильно распознать оригинальный символ и сообщает, что длина строки равна +1 по сравнению с MySQL? Я предполагаю, что PHP должен уметь правильно обрабатывать все символы ASCII.
ОБНОВЛЕНИЕ:
Когда я печатаю оригинальную строку (которая не печатается) в HTML-документе (перед отправкой обратно в PHP), длина строки указывается как 249 символов, а символ '-' можно распечатать.