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

Php mysql中文本中出现的奇怪字符,php,html,mysql,encoding,character-encoding,Php,Html,Mysql,Encoding,Character Encoding,在VARCHAR和TEXT MySQL数据库数据类型中,我一直看到在从HTML TEXTAREA字段插入或更新内容后,每个空格前都会出现字符 当我在插入/更新之前转储PHP数据时,字符不在那里 我尝试将数据库和表从latin1_swedish_ci的默认排序规则转换为utf8_general_ci编码,然后再次插入/更新数据,但每个空格前的文本中仍然显示字符 老实说,我并没有很好地掌握排序规则和字符编码,我认为如果保留默认设置,情况会很好,但后来我遇到了这个问题。如何防止这些额外字符出现 [编辑

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

当我在插入/更新之前转储PHP数据时,字符不在那里

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

老实说,我并没有很好地掌握排序规则和字符编码,我认为如果保留默认设置,情况会很好,但后来我遇到了这个问题。如何防止这些额外字符出现


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

尝试在数据库初始化上执行
设置名称“utf8”
。还要检查PHP文件的编码。

我认为文本/html中可能隐藏了一些非ascii代码。也许你应该试试使用

$text= str_replace('`', "'", $text);
$text= preg_replace("/[^(\x20-\x7F)]*/",' ', $text);

在将非ascii字符插入数据库之前将其剥离。

结果表明,我用于生成输入/文本区域字段的PHP库存在问题。对于textarea字段,它用nbsp特殊字符替换值中的所有空格。因此,在将该值存储和重新存储到数据库时,情况有点不稳定。我禁用了那个功能


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

您没有将此文本视为UTF-8。可能是ISO-8859-1?排序与此无关。排序规则基本上是“字母顺序”,并确定例如德语ringel-s是从a-Z排序到B之后还是从a-Z排序到s.UTF-8之后。您应该检查的是您收到的数据是否为您期望的编码(发布表单时检查浏览器编码),并检查浏览器是否将返回的数据视为UTF-8格式(同样:浏览器编码)@Tularis,每个排序规则都有一个默认字符集,许多人使用PHPMyAdmin通过设置排序规则来设置字符集。这不会去除“所有非ascii文本”,只会去除
\xA0
,这是一个单一的字符。还有数以十亿计的其他非ascii字符存在(并且经常使用!),但据我所知,PHP方面没有特殊字符。当我尝试这个时,它去掉了空格(反过来,也去掉了字符)。我不知道为什么突然需要这种方法。我不想去掉标点符号、键盘符号或空格。当你从文本编辑器(如MS Word等)或从包含此类字符的网页复制内容到文本字段时,通常会发生这种情况。我不会从任何地方复制内容。我只是在一个TEXTAREA字段中键入内容。我快速阅读了一些内容,似乎有很多帖子专门提到不要使用
设置名称。它实际上做什么?PHP文件默认为cp1252.Ha-Ha!看来我知道问题出在哪里了。带有表单字段的页面是cp1252,但库PHP文件是UTF-8。当我使用该库中的函数时,额外的字符似乎已经进入字符串中。然后,也许不是。我还在看那些角色。唉。