php – wordpress查询与引用/撇号varrients
发布时间:2020-12-13 22:25:50 所属栏目:PHP教程 来源:网络整理
导读:这是一个双重问题.我有一个ajax请求,轮询重复的帖子标题,但它被不同的引用/撇号和它们的变体抛出,当我知道有重复时返回负数. 我的帖子标题为:“Ben’s Big Fish”,即撇号( rsquo;) 但是对以下内容进行查询总是会出现负面影响: Ben's Big Fish (apos;)Ben’
这是一个双重问题.我有一个ajax请求,轮询重复的帖子标题,但它被不同的引用/撇号和它们的变体抛出,当我知道有重复时返回负数.
我的帖子标题为:“Ben’s Big Fish”,即撇号(& rsquo;) 但是对以下内容进行查询总是会出现负面影响: Ben's Big Fish (') Ben’s Big Fish (’) Bens Big Fish (no apos) 但是,Big Fish的查询会返回包含这些单词的所有变体帖子标题,包括带引号和撇号的帖子标题. 以下是导致问题的主要字符: Apostrophe ' ' Open single quote ‘ ‘ Close single quote ’ ’ --- Quotation mark " " Open double quotes “ “ Close double quotes ” ” 由于用户经常从MS Word文档等中提取文本,因此这些字符会出现很多. 在js端,我通过传递它通过这个函数编码帖子标题,然后通过json发送到我的ajax处理程序: function htmlEntities(str) { return String(str).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/'/g,''').replace(/‘/g,'‘').replace(/’/g,'’').replace(/“/g,'“').replace(/”/g,'”'); } 在我的php ajax hook中,我正在处理传入的POST查询,如下所示: global $wpdb; // Grab details from inbound POST array & prepare for sql $title = html_entity_decode($_POST['post_title']); //first un-encode $post_id = $_POST['post_id']; $sim_query = "SELECT ID FROM $wpdb->posts WHERE post_status = 'publish' AND post_title LIKE '%%%s%%' AND ID != '%d'"; $sim_results = $wpdb->get_results( $wpdb->prepare( $sim_query,$wpdb->esc_like($title),$post_id ) ); if ($sim_results) { // Send the results back as json } 所以我的问题是 解决方法
问题的关键实际上是从JS的原始编码中回归.绊倒我们的一个关键角色:&’,实际上并没有被html_entity_decode解码,即使设置了ENT_QUOTES标志.相反,它预计'.
所以最后我们的js看起来像: function htmlEntities(str) { return String(str).replace(/&/g,''').replace(/‘/g,'”'); } 我们用PHP解码: $title = html_entity_decode($_POST['post_title'],ENT_QUOTES,'UTF-8' ); //first un-encode 同样重要的是要注意SQL,将单引号和撇号.它要求它们是escaped by doubling them like so:”.当我们使用SQL转义类 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |