在VARCHAR和TEXT MySQL数据库数据类型中,在从HTML TEXTAREA字段插入或更新内容后,我一直看到在每个空格之前出现字符。
当我在插入/更新之前对PHP数据进行vardump时,Â字符不在那里。
我尝试将数据库和表格从latin1_swedish_ci的默认排序规则转换为utf8_general_ci编码,然后再次插入/更新数据,但Â字符仍然出现在每个空格前的文本中。
老实说,我没有很好地掌握整理和字符编码,并认为当默认情况下保持正常,但后来我遇到了这个问题。如何防止这些额外字符出现?
[edit]:如果我第一次将文本更新到数据库,则不会显示额外的字符。如果我从数据库字段加载文本然后再次更新它,则会出现Â字符。
答案 0 :(得分:1)
尝试在数据库init上执行SET NAMES 'utf8'
。还要检查PHP文件的编码。
答案 1 :(得分:1)
我认为你可能在text / html中有一些隐藏的非ascii。也许你应该尝试使用
$text= str_replace('`', "'", $text);
$text= preg_replace("/[^(\x20-\x7F)]*/",' ', $text);
在将非ascii字符插入数据库之前删除它们。
答案 2 :(得分:1)
事实证明,我用来生成输入/ textarea字段的PHP库存在问题。对于textarea字段,它使用特殊字符替换值中的所有空格。因此,在将该值存储并重新存储到数据库时,事情变得有点不稳定。我禁用了该功能。
感谢大家花时间提出建议。