我正在尝试确保我的字符串在PHP中只有有效的UTF-8字符。我怎样才能做到这一点?

时间:2013-01-10 22:06:08

标签: php regex string unicode utf-8

  

可能重复:
  PHP: replace invalid characters in utf-8 string in

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

enter image description here

我认为这是一种外国无效的角色。

在PHP中是否有一种方法可以使用字符串并使用preg_replace或其他内容来确保我只在字符串中使用有效的UTF-8字符,而其他任何内容都会被删除?

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

  

最初打算用作传输控制字符   表示已收到乱码或无效字符。它有   当带内信令时,经常被用于其他目的   它提供的错误是不必要的,特别是在强大的方法的情况下   使用错误检测和纠正,或者预期错误   非常罕见,可以将角色用于其他目的   可取的。

您可以使用此正则表达式来删除它(and a few others):

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

preg_replace( $reg, "", $str );

答案 1 :(得分:0)

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

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

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