如何从php字符串中删除“�”?

时间:2012-12-27 19:52:29

标签: php string utf-8 byte-order-mark

  

可能重复:
  How to replace � in a string

我正在读取来自数据库的XML表格中的数据。在原始输出中,我会遇到这个字符“�”,这是UTF-8字符串,意思是“ ”。在搜索“ ”或“�”时,执行简单搜索并使用str_replace删除不起作用。有没有其他方法可以从字符串中删除此字符?

更新:

作为参考,这是为我清理字符串的功能。

    function db_utf8_convert($str)
{
    $convmap = array(0x80, 0x10ffff, 0, 0xffffff);
    return preg_replace('/\x{EF}\x{BF}\x{BD}/u', '', mb_encode_numericentity($str, $convmap, "UTF-8"));
}

2 个答案:

答案 0 :(得分:3)

你可以这样做:

$str = 'UTF-8 string meaning "�"';
echo preg_replace('/\x{EF}\x{BF}\x{BD}/u', '', iconv(mb_detect_encoding($str), 'UTF-8', $str));

输出: UTF-8 string meaning ""

答案 1 :(得分:2)

你可以做类似的事情:

<?php
$string = "asd fsa fsaf sf � asdfasdfs";

echo preg_replace("/[^\p{Latin} ]/u", "", $string);

查看此脚本以获得更多字符匹配:
http://www.regular-expressions.info/unicode.html#script

修改

我确实发现,人们说它有效,你可以尝试一下:

<?php
function removeBOM($str=""){
    if(substr($str, 0,3) == pack("CCC",0xef,0xbb,0xbf)) {
        $str=substr($str, 3);
    }
    return $str;
}
?>