php if语句在使用strstr时不起作用

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (176)
$test123 = "<ssl_result_message>APPROVAL</ssl_result_message>";

$value = strstr($test123, "<ssl_result_message>"); //gets all text from <ssl_result_message> forward

$value = strstr($value, "</ssl_result_message>", true); //gets all text before </ssl_result_message>

echo $value,"<br>";

if ($value == 'APPROVAL') {
echo 'Transaction is APPROVED!';}


else{
echo 'Transaction is DECLINED';}

回声值部分就像我预期的那样回应“APPROVAL”。但if语句不起作用。我的结果好坏参半。我试过= ==和===。

如果我使用$ value =“APPROVAL”; 而不是使用strstr和test的test123,它按预期工作。我在这里想念的是什么?

提问于
用户回答回答于

根据您的调试消息,string(28) "APPROVAL"您的字符串是:

<ssl_result_message>APPROVAL

APPROVAL,你的浏览器可能正在隐藏元素。你可以剥离元素,如果这真的是你的完整字符串:

$value = strip_tags($test123);

或者您可以使用解析器:

$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($test123);
libxml_clear_errors();
$ssl = $dom->getElementsByTagName('ssl_result_message');
$value = $ssl->item(0)->nodeValue;

至于你当前代码做了什么的解释......

该函数定义为

返回haystack字符串的一部分,从第一次出现的针开始到包括haystack结尾。

所以你搜索<ssl_result_message>,找到它并返回那个和剩下的字符串:

<ssl_result_message>APPROVAL</ssl_result_message>

然后</ssl_result_message>你把28字符串留给了你。解析器确实是处理这些类型进程的最佳方法。

用户回答回答于

尝试使用strip_tags而不是strstr。另外,使用strcmp进行字符串比较

$value = strip_tags($test123);

if (strcmp(trim($value),'APPROVAL')==0) {
   echo 'Transaction is APPROVED!';}
else{
   echo 'Transaction is DECLINED';}

扫码关注云+社区

领取腾讯云代金券