0

可能重复:
PHP:替换 utf-8 字符串中的无效字符

我有一个字符串,其中包含无效字符(它不是 UTF-8),例如以下显示 SUB:

在此处输入图像描述

我认为这是某种外国无效字符。

PHP中有没有办法获取一个字符串并使用preg_replace或其他方法来确保我只在我的字符串中使用有效的UTF-8字符,而其他任何东西都会被删除?

谢谢。

4

2 回答 2

1

首先,没有无效的 UTF-8 字符。存在无效的 UTF-8 字节和字节序列,这意味着有人试图对您的服务器发起编码攻击。这些可以使用mb_check_encoding即将到来的输入数据进行验证,如果您没有获得有效的 UTF-8,则会立即失败并返回 400 Bad Request。

你所拥有的只是 SUBSTITUTE 控制字符,一个有效但不可打印的字符。

最初旨在用作传输控制字符,以指示已接收到乱码或无效字符。当不需要它提供的带内错误信号时,它通常被用于其他目的,特别是在使用强大的错误检测和纠正方法的情况下,或者在错误预计足够少以使使用该字符的情况下其他目的为宜。

您可以使用此正则表达式来摆脱它(以及其他一些):

$reg = '/(?![\r\n\t])[\p{Cc}]/u';

preg_replace( $reg, "", $str );
于 2013-01-11T11:37:55.800 回答
0

mb_check_encoding功能应该能够做到这一点。

mb_check_encoding("Jetzt gibts mehr Kanonen", "UTF-8");

注意:我没有测试过这个。

于 2013-01-10T22:11:51.817 回答