php - preg_match 在包含非 UTF8 字符的二进制字符串的开头找不到 UTF-8 字符
问题描述
如果字符串中的某处是非 UTF8 字符,则带有修饰符 u 的 preg_match 将返回 false 以表示错误。例如:
<?php
$string = "ABCD\xc3";
$r = preg_match('/^./u',$string, $match);
var_dump($r); //bool(false)
这个例子自己试试:https ://3v4l.org/qkHl4
如果最后删除了非 UTF8 字符,则正则表达式会查找第一个字符。
$string = "ABCD";
$r = preg_match('/^./u',$string, $match);
var_dump($r, $match);
//int(1) array(1) { [0]=> string(1) "A" }
是否有一种简单的方法可以使用正则表达式在开头识别还包含非 UTF8 字符的字符串的 UTF-8 字符?
解决方案
根据这个答案,您可以使用mb_convert_encoding删除无效的 utf 字符:
$string = "ABCD\xc3";
$string = mb_convert_encoding($string, 'UTF-8', 'UTF-8');
$r = preg_match('/^./u', $string, $match);
var_dump($r, $match);
给出以下结果:
int(1)
array(1) {
[0] =>
string(1) "A"
}
推荐阅读
- java - Appium:iPhone safari 执行相同脚本比 Android chrome 需要更多时间
- html - CSS背景图像/封面问题
- python - 运行时警告 - Greenlet.greenlet 大小已更改?
- xml - 如何在树视图中隐藏一行?
- javascript - ReactCssTransitionGroup,调低不透明度然后向上滑动
- ffmpeg - FFMPEG 帧提取 - 卡住
- javascript - 在可编辑 div 内的两个不可编辑跨度之间使用向右箭头移动光标
- python - 如何在 Python 中运行 PDFbookmarker
- java - 插件依赖的 Org.JSON
- api - 我的 oppproduct 中的 Swagger-YAML 错误映射条目