PHP无法识别html表单中的引号

时间:2016-09-18 22:35:35

标签: php html character-encoding

我使用一个非常基本的html表单和提交按钮,它调用我的PHP来处理输入。问题是我的PHP无法识别“当我尝试str_replace时的标记。这是我的PHP :(注意 - html文本字段输入是从谷歌文档中粘贴的)

<?php

    $article = $_POST['article'];
        //This contains: “This has quotes” from my html input field

    echo str_replace("”", "quote", $article);
        //Returns the input, without quote replacement
    echo addslashes($article);
        //Does not add slashes


    $quotes = "“This has quotes”";

    echo str_replace("“", "quote", $quotes);
        //Returns quoteThis has quotesquote as it should


?>

那么,HTML输入会导致输入引号无法识别,有没有办法解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:1)

我可以看到immediatley你在游戏中有很多不同的引用。首先是垂直单引号和双引号&#34;和&#39;,以及它们的左右版本。

对于此代码,您必须密切关注封装字符。所以....

<?php

    $article = $_POST['article'];  //This contains: “This has quotes” from my html input field
    $article = str_replace('”', 'quote1', $article); // remove double left quote
    $article = str_replace('"', 'quote2', $article); // remove double vertical quote
    $article = str_replace("'", 'quote3', $article); // remove single vertical quote

    echo addslashes($article); //Does not add slashes

    $quotes = "“This has quotes”";

    echo str_replace("“", "quote", $quotes); //Returns quoteThis has quotesquote as it should

?>

你会注意到在上面的例子中,只管理了6个基本引号中的3个,如果你想要替换它们,你需要添加一些新行,如下所示。

<?php

// REPLACE USING CHARACTER STRING
$article = str_replace('"',      'double vertical', $article); // replace double vertical
$article = str_replace("'",      'single vertical', $article); // replace single vertical
$article = str_replace('‘',      'single left',     $article); // replace single left
$article = str_replace('’',      'single right',    $article); // replace single right
$article = str_replace('“',      'double left',     $article); // replace double left
$article = str_replace('”',      'double right',    $article); // replace double right
// REPLACE USING CHARACTER STRING

// REPLACE USING CHATACTER CODE
$article = str_replace(chr(34),  'double vertical', $article); // replace double vertical
$article = str_replace(chr(39),  'single vertical', $article); // replace single vertical
$article = str_replace(chr(145), 'single left',     $article); // replace single left
$article = str_replace(chr(146), 'single right',    $article); // replace single right
$article = str_replace(chr(147), 'double left',     $article); // replace double left
$article = str_replace(chr(148), 'double right',    $article); // replace double right
// REPLACE USING CHATACTER CODE

?>

此处的上述示例显示了执行这些替换的两种方法,一种使用字符串,另一种使用聊天号码。在这种情况下都会这样做,但字符代码通常更容易查看。