2014-11-02 90 views
1

我有一个字符串,其中包含特殊引号字符(“ ”)以及其他可能需要转义才能正确呈现的字符。如何逃避“和”与PHP?

我尝试使用

htmlentities($string, ENT_QUOTES, "UTF-8") 

但是似乎对工作不。我认为他们会变成“”,但他们不会。

当他们没有在我的html文档中转义时,这些字符在Firefox中呈现为 。

也许我有什么毛病我的编码设置,因为他们似乎在这个岗位工作正常不被转义..

然而,这一切看起来是正确的对我说:

  • Content-Type是设置为UTF-8在<head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    
  • 根据file,该文件是保存d为UTF-8

    index.phtml: HTML document, UTF-8 Unicode text, with very long lines 
    
  • Firefox的文件识别为UTF-8

然而,直“和”■不要正确渲染,但逃脱版本(&ldquo;&rdquo;)做的。

+0

弯引号替换字符串不是特殊,他们并不需要进行转义。 – Barmar 2014-11-02 02:58:32

+0

@Barmar然后他们为什么渲染有趣?我在中将字符集设置为UTF-8:'' – gandalf3 2014-11-02 02:59:01

+1

您可能没有指定正确的编码在'Content-type'中。 – Barmar 2014-11-02 02:59:34

回答

1

该函数将"

function convert_smart_quotes($string) 
{ 
    $search = array(chr(147), chr(148)); 

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

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

所以通过包含此功能可以在你的情况传递给

htmlentities($string, ENT_QUOTES, "UTF-8") 

"在浏览器中正确地渲染后的字符串,字符串将被正确显示。

另一种方法是用&ldquo;&rdquo;

+0

我想有引号渲染,因为它们是,最好..更换'“'和''“传递字符串为'ヶ辆前'在连字符号的结果得到转化为''&所以它字面上呈现为“。在替换之前通过'htmlentities'运行它会使字符串完全消失。 – gandalf3 2014-11-02 19:47:18

+0

现在至少它没有'htmlentities',所以我接受了你的答案。谢谢 :) – gandalf3 2014-11-02 19:51:01

-1

逃脱引号使用backslah \所以基本上你的代码看起来像htmlentities($string, ENT_QUOTES, \"UTF-8\")

+0

我不想逃避这些报价,我想为了躲避特殊字符报价'“'和'”'如问题陈述.. – gandalf3 2014-11-02 03:07:57

0
$quoteLeft = ' “ ' ; 

$quoteRight = ' ” ' ; 

$utf = ''.$quoteLeft.'UTF-8'.$quoteRight.''; 

htmlentities($string, ENT_QUOTES, $utf);  
+0

我不想逃避这些报价,我想逃避特殊字符报价'“'和'”'如在规定问题.. – gandalf3 2014-11-02 03:09:31

+0

希望它能帮助:) – SergeDirect 2014-11-02 03:21:45

+0

为什么downwoted - 我已经改正了我的答案 – SergeDirect 2014-11-02 11:24:03