更换每个’;与';在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);