Php 检查UTF-8替换字符

Php 检查UTF-8替换字符,php,utf-8,character-encoding,Php,Utf 8,Character Encoding,我正在尝试确定我的字符串是否包含 目前我有两次尝试都失败了 第一次尝试: stristr($string, "\xEF\xBF\xBD") 第二次尝试 preg_match("#\xEF\xBF\xBD#i", $string) 这些都不管用 问题是,如何检查我的字符串中是否有替换字符?如果您只是想用它来查看字符串中是否有不可见的字符,您可以使用如下内容: if (strlen($string) != strlen(iconv("UTF-8", "UTF-8//IGNORE", $strin

我正在尝试确定我的字符串是否包含

目前我有两次尝试都失败了

第一次尝试:

stristr($string, "\xEF\xBF\xBD")
第二次尝试

preg_match("#\xEF\xBF\xBD#i", $string)
这些都不管用


问题是,如何检查我的字符串中是否有替换字符?

如果您只是想用它来查看字符串中是否有不可见的字符,您可以使用如下内容:

if (strlen($string) != strlen(iconv("UTF-8", "UTF-8//IGNORE", $string)))
    echo "This string has invisible characters";
mb_convert_encoding('က', 'UTF-8', 'HTML-ENTITIES');
问题中的方法也应该有效,但它要求字符串的字符编码实际为UTF-8。在检查字符是否存在之前,可以使用
iconv
将字符串从其编码转换为UTF-8

另外:您可能希望对此字符使用多字节表示法,而不是\uFFFD。但是,PHP默认情况下不支持此功能,这意味着您必须使用以下技巧:

if (strlen($string) != strlen(iconv("UTF-8", "UTF-8//IGNORE", $string)))
    echo "This string has invisible characters";
mb_convert_encoding('က', 'UTF-8', 'HTML-ENTITIES');

更多信息。

假设
$string
以UTF-8编码,则第一次尝试有效。为什么不呢?@Joni它返回false,尽管我可以在输出中看到替换字符。
$string
是否正确地用UTF-8编码?请记住,PHP字符串可以包含任意二进制数据,如果
$string
包含在UTF-8中非法的字节序列,则当输入有其他内容时,输出可能会显示替换字符。@Joni问题是某些数据可能是UTF-8编码的,而有些则不是。检查每一行,我可以看到替换字符有时会弹出-但我似乎无法确定行。听起来像是一个在这里。我冒昧地猜测字符串不包含替换字符,但是您对它的处理不正确,并且它在浏览器中的显示不正确。请描述一下你的实际问题。