我发现了很多结果,但由于某些原因,对我来说没有任何作用!我已尝试使用正则表达式preg_replace
和html_entity_decode
,但没有好......
我想选择具有哈希标记前缀的单词,例如#WORD
,效果很好,但有时候哈希标记会被读作‏#WORD
并且它会错过。
实施例:
This is a normal #hash_mark but #this_isn't
看起来如下:
正则表达式用于选择带有哈希标记前缀'~(?<=\s|^)#[^\s#]++~um'
在标记为重复的问题中,答案不适用于Unicode文本,如图所示:
代码会删除所有特殊字符,包括Unicode文本,只需将‏#
替换为普通#
function remove_special_char($sentence){
return preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s','',$sentence);
}
echo remove_special_char("hello مرحبا привет שלום");
输出:
hello
答案 0 :(得分:1)
有两个不同的字符special_characters
让你看看我发生了什么调查
var_dump(ord('#')); //return ASCII value of this char
$str1 = 'This is character 226 #';
$str1v1 = preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $str1);
var_dump(ord('#')); //return ASCII value of second char
$str2 = "This is character 35 #";
$str2v1 = preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $str2);
var_dump($str1v1);
var_dump($str2v1);
var_dump($str1);
var_dump($str2);
输出:
int 226
int 35
string 'This is character 226 ' (length=22)
string 'This is character 35 ' (length=21)
string 'This is character 226 â€#' (length=26)
string 'This is character 35 #' (length=22)
也许您或您的最终用户已完成复制和粘贴某处,并且它们包含转换的字符代码,如您所描述的(‏#)
。因为它们被渲染成相同的表面并让你感到困惑。
为了逃避这些角色,我在下面一行使用了正则表达式
preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $str1);