如何在PHP中删除文本字符串中的隐藏字符?
我很难匹配两个文本字符串。其中一个包含文本字符串中的一些隐藏字符 我有一个文本字符串:“PR&Communications”存储在SQL数据库中。从那里拉入如何在PHP中删除文本字符串中的隐藏字符?,php,mysql,string-matching,Php,Mysql,String Matching,我很难匹配两个文本字符串。其中一个包含文本字符串中的一些隐藏字符 我有一个文本字符串:“PR&Communications”存储在SQL数据库中。从那里拉入$database\u version,var\u dump($database\u version)显示字符串有19个字节 我(在允许的情况下)从一个网站上抓取了一些文本,并将其转换成变量,$web\u version。从表面上看,字符串是“PR&Communications”,但它与数据库版本不匹配,即如果($database\u ver
$database\u version
,var\u dump($database\u version)
显示字符串有19个字节
我(在允许的情况下)从一个网站上抓取了一些文本,并将其转换成变量,$web\u version
。从表面上看,字符串是“PR&Communications”,但它与数据库版本不匹配,即如果($database\u version==$web\u version)
不正确
var\u dump()
显示$web\u版本
有23个字节trim()
没有效果,strip_tags()
也没有效果,但是preg_replace('/[^\PC\s]/u',$web_version)
会删除一些内容,因为之后string_var($web_version)
会显示仅包含14个字节的字符串。它显然删除了一些内容,可能删除得太多,因为字符串仍然与$database\u version
不匹配
有什么想法吗
$trimmedVal = preg_replace("/\s+|[[:^print:]]/, "", $value)
trim()仅删除“\t\n\r\0\x0B”(请参阅),因此请使用上面的代码段从字符串中删除未打印的字符。Wen您试图比较($database\u version==$web\u version)是否都是字符串格式的变量?尝试一些类型转换和修剪方法。您可以尝试使用
utf8解码($web\u版本)
-。调试:要将字符串视为十六进制字节,请使用var\u转储($web\u版本,bin2hex($web\u版本),\uu文件\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu代码>。看看这个字符代表什么:谢谢你,Ryan,你的var_dump公式显示一个值的“&”是一个符号,另一个是&;,因此,这两个值不匹配。这帮我解决了这个问题。这帮我解决了一个稍微不同的问题。也许您可以澄清一下非打印字符以及此正则表达式的实际功能?[[:print:]
是PCRE print character类(复杂正则表达式的别名,更多为:)语法。打印字符表示在页面呈现时可见^
字符类或组中的符号表示否定,因此[[:^print:]
表示不可打印的字符-在页面呈现后不可见的字符(例如BOM标记)。regex的其他部分非常简单-\s
代表“任何空格符号”,(空格、制表符、新行等),+
表示“重复一次或多次”,pipe(|
)表示“或”。因此,整体而言,它可以理解为“查找任何空格符号或不可打印字符”。