如何用单引号替换撇号(')(')

时间:2017-03-21 16:23:40

标签: php

似乎有两种类型的撇号。我想知道这个角色(')和这个('

之间的区别

第一个是从Microsoft Word复制的,我试图将其放入文本区域,然后插入到数据库中,但它不起作用。它打破了我的查询,所以我想用这个替换它(')请问我该如何做到这一点。

我尝试了这个,但它似乎无法正常工作

function replace_microsolft_apostrophe($string){
        $string = str_replace('’', "'", $string);
        return $string;
    }

我的查询如下:

function create_note($page_id,$title,$note,$category,$author_id){
    global $conn,$notes_table,$pages_table,$notification_table;
    $sql = "INSERT INTO $notes_table(page_id,title,content,note_category) VALUES(?,?,?,?)";
    $query = $conn->prepare($sql);
    $query->bind_param("issi",$page_id,$title,htmlspecialchars($note),$category);
    $query->execute();
}

上述查询在没有此字符('

的情况下正常工作

我也想知道为什么会这样呢?因为它是相同的键我按,但当它转到Microsoft Word时,角色似乎发生了变化。我试图让它工作的原因是因为用户可以从我的应用程序中复制已经输入的来自Microsolf单词的作品并过去我希望他们编写并记录和发布它。

任何帮助都会很好。

2 个答案:

答案 0 :(得分:4)

WOW!上网后我发现 Pascal Martin的答案非常有用......它还提到了一个完整答案的网站。 How to replace Microsoft-encoded quotes in PHP

我能够将正确的引号替换为正常引用

  //convert single-byte apostrophes -encoded
function convert_smart_quotes($string) 

{ 
    $search = array(chr(145), 
                    chr(146), 
                    chr(147), 
                    chr(148), 
                    chr(151)); 

    $replace = array("'", 
                     "'", 
                     '"', 
                     '"', 
                     '-'); 

    return str_replace($search, $replace, $string); 
} 

这个答案也更有用: Converting Microsoft Word special characters with PHP

答案 1 :(得分:1)

这似乎是一个字符集问题。您是否检查过编辑器的字符集是否设置为ISO-8859-1

无论如何,解决方法可能是将您的字符串转换为十六进制,让MySQL再次将其转换为字符串。我没有测试过这段代码,但它应该有用。

function create_note($page_id,$title,$note,$category,$author_id){
    global $conn,$notes_table,$pages_table,$notification_table;
    $sql = "INSERT INTO $notes_table(page_id,title,content,note_category) VALUES(?,?,UNHEX(?),?)";
    $query = $conn->prepare($sql);
    $query->bind_param("issi",$page_id,$title,bin2hex(htmlspecialchars($note)),$category);
    $query->execute();
}