php - MySQL数据库中的错误编码能否破坏AJAX请求(用PHP编写)?

标签 php mysql ajax encoding wamp

我这里发生了一个奇怪的情况。

在运行WAMP服务器的localhost(Apache,MySQL,PHP)上,我创建了一个网页,该网页显示数据库表中的消息列表。

假设DIV容器被称为:#message-list

该列表可以正确显示(启动页面时,PHP呈现整个页面)。
PHP回显的HTML标记可以正常工作。
因此,MySQL数据库查找也可以!大。

现在...

借助一点AJAX和jQuery的魔力,我通过向使用使用生成初始#message-list DIV的SAME基础代码的PHP脚本发送POST请求,来创建一种表单来动态添加更多消息。

AJAX的PHP脚本可完成两件事:


为用户的新消息添加一条记录;
回显列表(现在应使用新消息更新列表);


当AJAX响应返回到浏览器时,JavaScript端将旧列表替换为新的#message-list内容。

现在,这...部分起作用。

出了什么问题-在给定的页面上,我以前的一些帖子似乎在某种程度上“破坏了” PHP端的AJAX请求中的内容,导致响应为空(基本上没有生成HTML代码来替换#message-list DIV标签)。

但是,在其他一些页面上,AJAX响应也可以正常工作。

所以我的问题是:


数据库中的某些String数据是否可能由于某些无效字符,编码错误或引号/双引号而中断了我的PHP脚本的执行?


我尝试使用PHP的htmlentities()和mysql_real_escape_string()函数来解决此问题,但是收到AJAX响应后,我的其中一个页面仍然无法正确刷新列表。

仅仅是我需要清理/清理表中的现有内容吗?
如果是这样,是否有任何简单的脚本/查询可用于执行此操作?

谢谢!



编辑#1:


MySQL版本= 5.5.24-log
通过使用mysql_client_encoding,它显示为“ latin1”(啊哈!那可能是问题所在!)
在PHP中,使用mysql _...方法(例如mysql_connect,mysql_select_db,mysql_query等);


数据库表示例可能出现的问题:
http://pastebin.com/PjLVmXEF

从外观上看,许多开发人员表示建议使用PDO。我会试一下,看看是否所有错误都消失了。到目前为止,非常感谢大家的帮助!



编辑#2:

我当前的解决方案是:

我使用这些查询来修改数据库和带有编码问题的表:

// SQL queries:
ALTER DATABASE timegrasp charset=utf8;
ALTER TABLE tg_messages CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;


其次,我注意到特定记录中的某些字符未正确显示(一些双引号句子周围的Â)。因此,我手动在MySQL查询浏览器中退格并重新插入了双引号,以确保它完全消失了。

在PHP方面,我仅使用以下方式对进入数据库的消息进行编码:

$htmlConverted = htmlentities( $pMessage, ENT_COMPAT | ENT_HTML401, "UTF-8" );
return mysql_real_escape_string( $htmlConverted );


并确保我以此开始我的MySQL连接:

mysql_set_charset("utf8", $DB_LINK);


然后,我可以直接从表中读取String,而无需进行任何解码/转换。

最后,为了进行测试-我从源中复制了相同的消息(与客户端进行Skype聊天),该消息带有特殊字符,并将其粘贴到我的Web表单中,现在可以正常工作了! :)

我不确定上面的所有步骤和参数都是必需的,但这正是解决我的问题的原因。

最好知道一下,以备将来参考,尽管这是在MySQL表中处理特殊字符时的不良做法或常见的“不要”错误。

最佳答案

PHP json_encode函数拒绝处理UTF-8中无效的字符串:它返回null。如果未为数据库连接设置字符编码,则可能正在使用其他一些编码-不是UTF-8-,并且传递给此函数的数据实际上不是有效的UTF-8。

如果您提到了诸如使用的数据库API和连接参数等详细信息,我可以提供进一步的建议...

关于php - MySQL数据库中的错误编码能否破坏AJAX请求(用PHP编写)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17303717/

相关文章:

php - 我正在尝试将脉冲实现到 PHP Ratchet Websocket 应用程序中

php - 从mysql db查询特殊字符

javascript - 将这些脚本组合在一起,Javascript/AJAX 和 PHP

mysql 错误号 : 150 “Foreign key constraint is incorrectly formed” - MariaDB

jQuery/AJAX - 响应格式

jquery - 将图像延迟加载绑定(bind)到ajax请求后插入的新图像

php - 将数据库 ID 混淆为面向客户的号码

php - 线程评论的可扩展解决方案

php - 从 SQL 中检索条目的相似计数

python - 将巨大的 csv 文件解析为 mysql [python]