PHP的帖子没有被转义。字符编码?

时间:2011-07-19 19:54:05

标签: php

我有一个包含撇号字符的字符串,无法转义或搜索。

基本上我有一个从第三方服务中提取的字符串。它被编码为ISO-8859-1,当它进来时,我无法逃脱一个特定的角色。示例字符串位于

之下
  

我们很自豪能够提供一些令人兴奋的产品   制造商的保修

在这种情况下,使用mysql_real_escape_string不会逃脱第一个撇号,但它会逃脱其他撇号。不管我做什么,我似乎无法逃脱字符串或用普通的撇号替换它。

以下是我用来获取文件的内容。

$opts = array(
          'http'=>array(
            'method'=>"GET",
            'header'=>"Content-Type: text/html; charset=ISO-8859-1" 
            )
        );
        $context = stream_context_create($opts); 
        $html = file_get_contents($url, false, $context);

如果我尝试使用mb_convert_encoding()将字符串转换为UTF-8,它不会以任何方式改变它。我试图简单地使用ISO-8859-1字符串上的str_ireplace()和UTF-8字符串上的mb_ereg_replace替换字符串。没有任何影响。

2 个答案:

答案 0 :(得分:2)

第一个撇号实际上是字符RIGHT SINGLE QUOTATION MARK(U + 2019,)而不是U + 0027(')。这不会被mysql_real_escape_string转义。

但除此之外,U + 2019未包含在ISO 8859-1 character set中,因此无法使用ISO 8859-1进行编码。

答案 1 :(得分:0)

str_ireplace()在UTF-8字符串上不安全。大量的info on UTF-8 is available at this link

如果您确实希望将其视为常规撇号,str_replace将正常工作(如引用的UTF-8信息页中所述):

<?php

   $str = "We’re proud to offer some exciting products that come with a full manufacturer's warranty";
   print mysql_real_escape_string(str_replace('’', "'", $str));

?>