Php 带引号/撇号变量的wordpress查询
这是一个双重问题。我有一个ajax请求,它轮询重复的文章标题,但是它被不同的引号/撇号及其变体抛出,当我知道有重复的时候返回否定 我有一篇题为“本的大鱼”的帖子,即带撇号的Php 带引号/撇号变量的wordpress查询,php,mysql,sql,wordpress,html-entities,Php,Mysql,Sql,Wordpress,Html Entities,这是一个双重问题。我有一个ajax请求,它轮询重复的文章标题,但是它被不同的引号/撇号及其变体抛出,当我知道有重复的时候返回否定 我有一篇题为“本的大鱼”的帖子,即带撇号的(’) 但对以下内容进行查询时,结果总是否定的: Ben's Big Fish (') Ben’s Big Fish (’) Bens Big Fish (no apos) 但是,对bigfish的查询将返回包含这些单词的所有变体帖子标题,包括包含引号和撇号的帖子标题 以下是
(’)
但对以下内容进行查询时,结果总是否定的:
Ben's Big Fish (')
Ben’s Big Fish (’)
Bens Big Fish (no apos)
但是,对bigfish
的查询将返回包含这些单词的所有变体帖子标题,包括包含引号和撇号的帖子标题
以下是引起问题的主要因素:
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, '”');
}
所以我的问题是
a) 如何让查询按预期返回明显的重复项
b) 可能相关的是,有一种方法可以有效地在字符串中搜索所有变体-撇号和引号字符的外观,而无需多次查询?问题的关键实际上回到了JS的原始编码。绊倒我们的关键人物之一是:
&apos代码>,即使设置了ENT\u引号
标志,也不会被html\u entity\u decode
实际解码。相反,它期望'代码>
因此,最终我们的js看起来像:
function htmlEntities(str) {
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/‘/g, '‘').replace(/’/g, '’').replace(/“/g, '“').replace(/”/g, '”');
}
同样重要的是要注意,SQL将拒绝使用单引号和撇号。它要求它们是:”
。当我们使用Wordpress的SQL转义类时,Wordpress会为我们处理转义问题我在任何方面都不是正则表达式专家,但在搜索特殊字符时,您不应该放\吗?例如:.replace(/&/g,,&;)
->.replace(/\&/g,,&;)
等?@dingo\u感谢您指出这一点,尽管我认为在这种情况下不需要逃跑。Webkit至少在这两种方式中似乎都能很好地处理这个问题,尽管旧的js引擎可能会例外。此示例源自。无论如何,它都不会以任何方式影响sql查询的结果。
function htmlEntities(str) {
return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/‘/g, '‘').replace(/’/g, '’').replace(/“/g, '“').replace(/”/g, '”');
}
$title = html_entity_decode($_POST['post_title'], ENT_QUOTES, 'UTF-8' ); //first un-encode