我有一个包含撇号字符的字符串,无法转义或搜索。
基本上我有一个从第三方服务中提取的字符串。它被编码为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替换字符串。没有任何影响。
答案 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));
?>