我创建了一个带有ACP的页面,并将数据保存在那里。一切运行都没有问题。但是突然之间我遇到了一个神秘的问题。在公共区域,我总是按字母顺序输出数据,但条目(“损坏的物品”)始终排在最后。
我要选择的命令:
nil
我要插入的命令:
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"
受影响的数据库: https://syntaxhigh.normanhuth.com/FlniL9
到目前为止,仅此一项出现了问题。而且,如果我通过phpMyAdmin手动输入它,则可以使用。
答案 0 :(得分:2)
测试您的数据和查询,并得到以下结果:
. . .
| 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',
Unicode 200b是“零宽度空间”:https://www.fileformat.info/info/unicode/char/200B/index.htm
在将数据插入数据库之前,应该对数据进行某种空白修剪操作。不幸的是,常规的PHP trim()函数无法完成这项工作。
有关解决方法,请参见Trim unicode whitespace in PHP 5.2。
发表评论:
您无法在PHP中使用trim()
函数。 PHP trim()
函数仅能识别ASCII空格字符,而不能识别类似Unicode空格字符的字符。请参见http://php.net/trim,以获取修饰符查找的字符列表。
答案 1 :(得分:0)
数据库中确实确实存在一个不可见的标志。可能是在使用Javascript / Ajax进行的第一次测试中。
比尔·卡文(Bill Karwin)的小费有所帮助。 我在MySQL类中添加了“ Trim unicode whitespace in PHP 5.2”函数。 并且只需在循环中遍历表并使用此函数重写内容,即可使数据库干净。
感谢您的帮助。