【问题标题】:How to remove "�" from php string? [duplicate]如何从 php 字符串中删除“�”? [复制]
【发布时间】:2012-12-13 04:25:18
【问题描述】:

可能重复:
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"));
}

【问题讨论】:

  • 第一个结果是一个 SO 问题,回答:google.com/search?q=� 不确定这是否有帮助。
  • 在问这个之前用 php 等效语句尝试过,没有用。
  • 这是 UTF-8 BOM。 � 表示无效字符。如果你使用了解析器,那么你就不会遇到这个问题。

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


【解决方案1】:

你可以这样做:

$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 ""

【讨论】:

  • 我对此寄予厚望,但遗憾的是它不适合我。
  • @jlane09 如果我的第一个答案不起作用,那是因为您的服务器使用的是 UTF-8 以外的编码,所以我为您更新了答案。
  • 仍然不想工作,不过我很感激继续努力。
  • 是的,我想它可能不会,因为mb_detect_encoding() 非常有限!您没有将数据库和服务器上的编码设置为 UTF-8 的任何原因?这样可以避免很多未来和当前的问题。
  • 我要插入这些字符串的数据库是用 UTF-16 编码的。它来自的数据库我不确定,也无法控制。它运行的服务器是 UTF-8
【解决方案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;
}
?>

【讨论】:

  • 这也会删除许多其他字符。
  • 这就是我添加链接的原因,它有更多的组合。
  • 确实,但是列出的任何脚本都会删除属于该脚本的所有个字符,而不仅仅是这3个。
  • 如果有人可以发布一个只删除 BOM 的 preg_match,那就太棒了。
  • 不,那些小 BOM 仍在使用该功能弹出。
猜你喜欢
  • 2017-01-04
  • 2015-08-30
  • 2014-01-26
  • 1970-01-01
  • 2017-06-20
  • 2010-12-02
  • 2013-05-23
  • 2021-05-12
  • 2013-07-01
相关资源
最近更新 更多