在的本机PHP 5实现中,我遇到了一种有趣的行为json_encode()。显然,当将对象序列化为json字符串时,编码器将使包含“卷曲”引号的字符串中的所有属性无效,该属性可能会在启用自动转换的情况下从MS Word文档中复制粘贴。
这是该功能的预期行为吗?我该怎么做才能迫使这些字符隐瞒它们的基本等同物?我已经检查了返回数据的数据库和插入的管理页面之间的字符编码不匹配,并且一切都正确设置了-看起来好像编码器由于这些字符而拒绝了这些值。还有其他人遇到过这种行为吗?
编辑:
澄清;
MSWord将采用标准的引号和撇号,并将其转换为更美观的“花式”或“卷曲”引号。当将这些字符放在内容管理器中时,这些字符的编辑界面(在html中)和数据库编码之间的字符集不匹配,这可能会引起问题。
不过,这不是问题所在。例如,我有一个代表人的个人资料和字符串的json_object:
Jim O’Shea
该撇号的UTF代码为 \u2019
从数据库中获取并直接进行json_encoded时,json对象中的结果将为null。
{"model_name":"Bio","logged":true,"BioID":"17","Name":null,"Body":"Profile stuff!","Image":"","Timestamp":"2011-09-23 11:15:24","CategoryID":"1"}
从来没有这个特定的问题(即json_encode()),但是我在其他地方使用的一种简单(尽管有点难看)的解决方案是遍历您的数据,并通过我从某处获得的此功能传递它(当我找到那里时,会记入它我知道了):
function convert_fancy_quotes ($str) {
return str_replace(array(chr(145),chr(146),chr(147),chr(148),chr(151)),array("'","'",'"','"','-'),$str);
}
Run Code Online (Sandbox Code Playgroud)