Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中删除文本字符串中的隐藏字符?_Php_Mysql_String Matching - Fatal编程技术网

如何在PHP中删除文本字符串中的隐藏字符?

如何在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

我很难匹配两个文本字符串。其中一个包含文本字符串中的一些隐藏字符

我有一个文本字符串:“PR&Communications”存储在SQL数据库中。从那里拉入
$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
不匹配

有什么想法吗

  • 找出已删除的内容
  • 去掉刚好足够匹配$database\u版本的内容
  • PS我不知道如何在十六进制代码中查看变量

    $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(
    |
    )表示“或”。因此,整体而言,它可以理解为“查找任何空格符号或不可打印字符”。