Я создал страницу с ACP и сохранил там свои данные. Все работает без проблем. Но вдруг у меня загадочная проблема. В публичной области я всегда выводю данные в алфавитном порядке, но запись («Поврежденные товары») всегда занимает последнее место.
Моя команда выбрать:
SELECT lyric_id, lyric_title, lyric_lang_00, lyric_text_00, lyric_lang_01,
lyric_text_01, lyric_lang_02, lyric_text_02, lyric_lang_03, lyric_text_03,
lyric_lang_04, lyric_text_04, lyric_lang_05, lyric_text_05
FROM dnd_lyrics
WHERE lyric_text_00!='' OR lyric_text_01!='' OR lyric_text_01!='' OR
lyric_text_02!='' OR lyric_text_03!='' OR lyric_text_04!='' OR
lyric_text_05!='' OR lyric_text_03!='' ORDER BY lyric_title ASC"
Моя команда вставить:
$db->query("INSERT INTO dnd_lyrics (lyric_title,lyric_lang_00)
VALUES('".$db->str($_POST['lyric_title'])."','".$db->str($config['lang'])."')");
Затронутая база данных: https://syntaxhigh.normanhuth.com/FlniL9
Пока что проблема возникла только с этой записью. И если я ввожу его вручную через phpMyAdmin, он работает.
взглянув на ваши данные, я вижу загадочный символ до того, как Поврежденные товары выглядит как возможный управляющий символ, вот в чем проблема. в зависимости от кодировки отображается как ​
​ Я этого не вижу. : O
переключиться на кодировку ansi
ХОРОШО. Спасибо. Я беру содержимое автозаполнения из другой таблицы с названиями треков, и там есть несколько столбцов с той же проблемой. Теперь я должен поискать там. Спасибо.
Не раскладывайте массив по столбцам - сделайте еще одну таблицу.
​ - это моджибаке для "ZERO WIDTH SPACE".






Протестировал ваши данные и ваш запрос и получил такой результат:
. . .
| 8 | World War 3 |
| 79 | W+J |
| 88 | Damaged Goods |
+----------+------------------------------------+
Обратите внимание на выравнивание правых полос. В данных есть непечатаемые пробелы. На моем экране это выглядит так:
. . .
| 8 | World War 3 |
| 79 | W + J |
| 88 | Damaged Goods |
+----------+------------------------------------+
Заголовок «Поврежденные товары» имеет дополнительное непечатаемое пространство в начале, что позволяет отсортировать его после всех остальных заголовков.
Если я открою ваши данные в vim, я увижу:
(88, '<200b>Damaged Goods', 'en',
Юникод 200b - это «пространство нулевой ширины»: https://www.fileformat.info/info/unicode/char/200B/index.htm
Вы должны выполнить какую-то операцию по обрезке пробелов в ваших данных, прежде чем вставлять их в базу данных. К сожалению, функция reglar PHP trim () не справляется с этой задачей.
См. Обрезка пробелов Unicode в PHP 5.2 для решения.
Повторите свой комментарий:
Использование вами функции trim() в PHP не сработает. Функция PHP trim() распознает только пробельные символы ASCII, но не символы Unicode, подобные пробелам. См. http://php.net/trim для списка символов, которые ищет обрезка.
Я встроил функцию обрезки прямо в класс MySQL return $ this-> link-> real_escape_string (trim ($ string));
Обрезка пробелов Unicode в PHP 5.2 - это решение для меня. Спасибо.
Hex ('W + J') = 57 E2808B 2B E2808B 4A (с добавлением некоторого интервала)
В базе действительно есть знак, который сразу не видно. Вероятно, во время первых тестов с Javascript / Ajax.
Совет Билла Карвина помог. Я добавил функцию «Обрезка пробелов Unicode в PHP 5.2» в свой класс MySQL. И которые просто проходят по таблицам в цикле и переписывают содержимое с помощью этой функции и, таким образом, очищают базу данных.
Спасибо за вашу помощь.
Может быть, перед именем стоит пробел или какой-то другой символ? Какие еще записи? Что показывает
var_dump? Вы также можете использовать этот код для SQL-инъекций.