奇怪的字符出现在mysql中的文本中

时间:2014-03-21 17:48:04

标签: php html mysql encoding character-encoding

在VARCHAR和TEXT MySQL数据库数据类型中,在从HTML TEXTAREA字段插入或更新内容后,我一直看到在每个空格之前出现字符。

当我在插入/更新之前对PHP数据进行vardump时,Â字符不在那里。

我尝试将数据库和表格从latin1_swedish_ci的默认排序规则转换为utf8_general_ci编码,然后再次插入/更新数据,但Â字符仍然出现在每个空格前的文本中。

老实说,我没有很好地掌握整理和字符编码,并认为当默认情况下保持正常,但后来我遇到了这个问题。如何防止这些额外字符出现?

[edit]:如果我第一次将文本更新到数据库,则不会显示额外的字符。如果我从数据库字段加载文本然后再次更新它,则会出现Â字符。

3 个答案:

答案 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字段,它使用特殊字符替换值中的所有空格。因此,在将该值存储并重新存储到数据库时,事情变得有点不稳定。我禁用了该功能。

感谢大家花时间提出建议。

相关问题