JQuery将HTML实体/表情符号发布到PHP服务器
我使用JQuery将表单值序列化并发布到PHP/MySQL服务器,表单文本区域包含作为HTML实体的文本和表情:JQuery将HTML实体/表情符号发布到PHP服务器,php,mysql,character-encoding,html-entities,Php,Mysql,Character Encoding,Html Entities,我使用JQuery将表单值序列化并发布到PHP/MySQL服务器,表单文本区域包含作为HTML实体的文本和表情: <textarea>Hello 😀 and goodbye</textarea> 你好😀;再见 服务器接收: 您好\ud83d\ude00,再见 但是,只有“Hello”正确地存储在数据库中。表情符号/实体及其消失后的任何文本。数据库获取: 你好 一切都是UTF-8贯穿始终 如何正确地将其解析为可以存储的内容,然后以正
<textarea>Hello 😀 and goodbye</textarea>
你好😀;再见
服务器接收:
您好\ud83d\ude00,再见
但是,只有“Hello”正确地存储在数据库中。表情符号/实体及其消失后的任何文本。数据库获取:
你好
一切都是UTF-8贯穿始终
如何正确地将其解析为可以存储的内容,然后以正确呈现的方式返回HTML?我一定忽略了一些简单的事情。解决了
根据问题下方注释中的Andy Foster更改数据库/表排序规则,或者更改JSON编码/解码以确保其正确保存为字符串
json_encode($str);
json_decode($str);
在我的例子中,有三个因素会影响编码/呈现:
1) 使用JQuery serialize()进行初始提交,该函数将表情符号转换为Unicode转义序列
2) 将Unicode转义序列保存到数据库中。我使用JSON编码来解决这个问题
3) 将JSON解码的表情符号字符串呈现回HTML模板时输出转义。尝试将编码为
utf8mb4
@AndyFoster您的意思是在数据库级别?在PHP中,您是否将PDO用于参数化查询?我们能看到那个密码吗?@MattS没什么比插入更复杂的了。。。值(“$escaped.”)@tomyes。SQL将在第一个4字节unicode字符处截断插入。我提到了为什么你要从你的答案中删除所有代码?@GrumpyCrouton在花了更多的时间之后,我意识到我发布的代码是特定于某个目的的,但不一定对每个场景都有用。我已经用更多的信息更新了答案。当使用json\u encode
时,添加json\u UNESCAPED\u UNICODE
作为第二个参数。@RickJames有趣的是,使用json\u UNESCAPED\u UNICODE再次将其破坏,字符串无法正确保存。@Tom-然后需要解决这个问题。请参阅中的“最佳实践”