Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带引号/撇号变量的wordpress查询_Php_Mysql_Sql_Wordpress_Html Entities - Fatal编程技术网

Php 带引号/撇号变量的wordpress查询

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的查询将返回包含这些单词的所有变体帖子标题,包括包含引号和撇号的帖子标题 以下是

这是一个双重问题。我有一个ajax请求,它轮询重复的文章标题,但是它被不同的引号/撇号及其变体抛出,当我知道有重复的时候返回否定

我有一篇题为“本的大鱼”的帖子,即带撇号的
(’)

但对以下内容进行查询时,结果总是否定的:

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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&apos;').replace(/‘/g, '&lsquo;').replace(/’/g, '&rsquo;').replace(/“/g, '&ldquo;').replace(/”/g, '&rdquo;');
} 
所以我的问题是 a) 如何让查询按预期返回明显的重复项
b) 可能相关的是,有一种方法可以有效地在字符串中搜索所有变体-撇号和引号字符的外观,而无需多次查询?

问题的关键实际上回到了JS的原始编码。绊倒我们的关键人物之一是:
&apos,即使设置了
ENT\u引号
标志,也不会被
html\u entity\u decode
实际解码。相反,它期望
'

因此,最终我们的js看起来像:

function htmlEntities(str) {
    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#039;').replace(/‘/g, '&lsquo;').replace(/’/g, '&rsquo;').replace(/“/g, '&ldquo;').replace(/”/g, '&rdquo;');
} 

同样重要的是要注意,SQL将拒绝使用单引号和撇号。它要求它们是:
。当我们使用Wordpress的SQL转义类时,Wordpress会为我们处理转义问题

我在任何方面都不是正则表达式专家,但在搜索特殊字符时,您不应该放\吗?例如:
.replace(/&/g,,&;)
->
.replace(/\&/g,,&;)
等?@dingo\u感谢您指出这一点,尽管我认为在这种情况下不需要逃跑。Webkit至少在这两种方式中似乎都能很好地处理这个问题,尽管旧的js引擎可能会例外。此示例源自。无论如何,它都不会以任何方式影响sql查询的结果。
function htmlEntities(str) {
    return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#039;').replace(/‘/g, '&lsquo;').replace(/’/g, '&rsquo;').replace(/“/g, '&ldquo;').replace(/”/g, '&rdquo;');
} 
 $title = html_entity_decode($_POST['post_title'], ENT_QUOTES,  'UTF-8' ); //first un-encode