更换每个’;与';在php中

更换每个’;与';在php中,php,mysql,codeigniter,Php,Mysql,Codeigniter,我在问题表单中有以下textarea字段,用户可以在其中发布问题: <tr> <th><label><?php echo $this->lang->line('question'); ?>: </label></th> <td><textarea value="" id="ques_desc" name="ques_desc" class="validate[r

我在
问题表单
中有以下
textarea
字段,用户可以在其中发布问题:

<tr>
    <th><label><?php echo $this->lang->line('question'); ?>: </label></th>
    <td><textarea  value="" id="ques_desc" name="ques_desc"
        class="validate[required] text-input" > </textarea> </td>
</tr>
变成

Check men’s and women’s rest rooms
当用户搜索
时,请在搜索字段中检查男士的

Check men's
不会出现在搜索结果中

我试过用
'
'
替换函数,它不起作用。 例如:

不将
'
替换为
'

'
替换每个
'
的方法可能是什么

编辑:

在查看页面上执行此操作时:

<?php 
$ques_desc1 = "Check men’s and women’s rest rooms "; 
$ques_desc = str_replace("’","'",$ques_desc1); 
echo $ques_desc; 
?>
成功了

在控制器上执行此操作时:

$ques_desc1 = $this->input->post('ques_desc');
$ques_desc = str_replace(" ",".",$ques_desc1);
它显示:
开盘盘点
开盘盘点

它也起作用了

但当我这么做的时候:

$ques_desc1 = $this->input->post('ques_desc');
$ques_desc = str_replace("’","'",$ques_desc1);

它不起作用。没有任何变化。

像这样使用
str\u replace

echo str_replace("’","'","Check men’s and women’s rest rooms");
输出
您在
str\u replace
语法中有错误。您应该将
'
作为第一个参数,将
'
作为第二个参数,以便更改此参数:

$ques_desc = str_replace("'","’",$ques_desc);
致:


听起来您在使用Microsoft Word的智能引号时遇到了问题。查看一些处理这个问题的技巧

我做了一个又快又脏的测试,结果:

$quotes=数组(
UTF-8中的“\xC2\xAB”=>“,//«(U+00AB)
UTF-8中的“\xC2\xBB”=>“,//»(U+00BB)
UTF-8中的“\xE2\x80\x98”=>“,/”(U+2018)
UTF-8中的“\xE2\x80\x99”=>“,/”(U+2019)
UTF-8中的“\xE2\x80\x9A”=>“,/”(U+201A)
UTF-8中的“\xE2\x80\x9B”=>“,//”(U+201B)
UTF-8中的“\xE2\x80\x9C”=>“,/”(U+201C)
UTF-8中的“\xE2\x80\x9D”=>“,/”(U+201D)
UTF-8中的“\xE2\x80\x9E”=>“,//(U+201E)
UTF-8中的“\xE2\x80\x9F”=>“,/”(U+201F)
UTF-8中的“\xE2\x80\xB9”=>“”,//(U+2039)
UTF-8中的“\xE2\x80\xBA”=>“,/›(U+203A)
);
$str=strtr($str,$quotes);

我找到了自己问题的解决方案

我试过这个:

$ques_desc1 = $this->input->post('ques_desc');
$ques_desc = iconv('UTF-8', 'ASCII//TRANSLIT', $ques_desc1);
在这里,
iconv('UTF-8','ASCII//translatit',$ques_desc1)
将Microsoft Word版本的单引号和双引号标记
替换为常规引号


它工作得很好。

修复你的搜索引擎不是更好的解决方案吗?例如,如果你的数据库需要存储单词
café
,而人们想用
caf
进行搜索,那么也许你可以将
é
改为
e
,但你会开始破坏非英语文本。我希望如此要成为看起来像引号的unicode字符。你需要知道它实际上是哪个字符。如果你能发布数据的hexdump,那就太好了。曾经为PHP编写过一个包。也许你可以试试。只要没有unicode,
0x27
是多字节字符的一部分。正如我已经说过的,我在发布之前尝试过stru替换对于数据库,它根本不起作用。$ques_desc=str_replace(“'”、“'”、$ques_desc);不替换“to”。@alex:只要是UTF-8,就不会发生这种情况。高位清除的字节都不会是多字节序列的一部分。@icktoofay我在尝试做一个示例时才发现了这一点。:@Venonj-请在您的问题中包含工作/不工作的示例(编辑它)上面。这样更容易阅读。我必须同意icktoofay在评论中的观点,不过,除此之外,对你的搜索引擎进行重新调整也是一个好主意,这样它可以更松散地匹配。我得到了解决方案。请检查我的答案。我得到了解决方案。请检查我的答案。+1找到你自己的解决方案,我也得到了答案解决方案供我自己参考…:P
echo str_replace("’","'","Check men’s and women’s rest rooms");
Check men's and women's rest rooms
$ques_desc = str_replace("'","’",$ques_desc);
$ques_desc = str_replace("’","'",$ques_desc);
$ques_desc1 = $this->input->post('ques_desc');
$ques_desc = iconv('UTF-8', 'ASCII//TRANSLIT', $ques_desc1);