我的应用程序正在处理网上商店/连接的市场,如易趣的人的订单交付地址。 我已经说明了正确处理kyrillic,chinese等字符的UTF-8编码。但是,我有时会收到一些未知字符entries,这些字符已经出现在ebay查看的收货地址中。所以沿途没有任何问题 - 弦乐就是这样传递的。防止非法混合排序/检查正确的排序在php
现在,在某些时候,我反对的正式执行地址校验(德国)地址DB像这样:
$query = "SELECT DISTINCT * FROM adrCheck WHERE zip='".$zip."' AND street='".$street." AND city='".$city."'";
如果至少有一个结果,我知道地址必须是正确的。 无论如何,当那些不正确的字符出现时,我得到一个SQL错误MYSQLi Error (#1267): Illegal mix of collations (cp850_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
,我可以作出反应。 但我希望能够事先检查,并只包含这些参数到正确编码的查询中。
我已经试过
print_r(mb_detect_encoding("K�ln")); // gives me UTF-8
print_r(mb_check_encoding("K�ln", "UTF-8")); // gives me 1/true
和preg_match method这也告诉我,它是有效的UTF-8。
我在忽略什么?有关如何处理这种偶然的snafu用户输入的任何建议?
什么字符集不为表的数据库使用和你设置HTML中的元字符集研究“黑钻石”?如果您使用准备好的语句而不是简单的'。$ var.' – Gntem
该数据库配置为utf8_general_ci。我还在我的
中使用了'。此外,我设置了header('Content-Type:text/html; charset = utf-8');'在我的index.php的开头。最后但并非最不重要的是,在初始化我的连接之后,我正在查询'SET NAMES'utf8''。可能是矫枉过正?! – Engle你对准备好的陈述是正确的。虽然我采用了这种更简单的方法,因为之前的输入已经通过几个数据库进行验证(eBay,亚马逊,商店软件......),并且在这种情况下我不写入数据库。 – Engle