PHP在使用奇怪的引号时会出现问题

rryofs0p  于 2023-10-15  发布在  PHP
关注(0)|答案(1)|浏览(115)

这是一个MySQL驱动的应用程序及其网页(PHP),我花了2天的时间调试了下面代码中的问题。2“didn 't work”注解当然不适用于源服务器(在那里一切正常),但适用于目标服务器,那里什么都不工作!这些网页不加区别地混合使用单(十六进制27),双(十六进制22)和“有趣”(十六进制e2 80 99)。
我该怎么办?“sed'ing”每一个页面将是容易的,但下次当我不得不重新迁移这些页面呢?
非常感谢您!

<?php

  echo "Welcome to a quote adventure<BR><HR>";

  $_SESSION['number1']=1;
  $_SESSION['number2']=2;
  $_SESSION['number3']=3;

  echo "my number1 (single-to-single quotes) is: ".$_SESSION['number1']."<BR>";
  echo "my number2 (single-to-double quotes) is: ".$_SESSION["number2"]."<BR>";
  echo "my number3 (single-to-funny quotes) is: ".$_SESSION[’number3’]."-------didn't work!<HR>";
 
  $_SESSION["number1"]=1;
  $_SESSION["number2"]=2;
  $_SESSION["number3"]=3;

  echo "my number1 (double-to-single quotes) is: ".$_SESSION['number1']."<BR>";
  echo "my number2 (double-to-double quotes) is: ".$_SESSION["number2"]."<BR>";
  echo "my number3 (double-to-funny quotes) is: ".$_SESSION[’number3’]."-------didn't work!<HR>";
 
  $_SESSION[’number1’]=1;
  $_SESSION[’number2’]=2;
  $_SESSION[’number3’]=3;

  echo "my number1 (funny-to-single quotes) is: ".$_SESSION['number1']."<BR>";
  echo "my number2 (funny-to-double quotes) is: ".$_SESSION["number2"]."<BR>";
  echo "my number3 (funny-to-funny quotes) is: ".$_SESSION[’number3’]."-------worked!<HR>";
?>

我希望网页在目标服务器上也能不加修改地工作

7gcisfzg

7gcisfzg1#

如果您更改了服务器,但没有彻底检查PHP设置,那么很可能您依赖的是已更改的默认设置,特别是与error reporting相关的默认设置。你的代码从来没有完全正确,它的工作部分纯粹是偶然的,但你现在才意识到。
PHP已经强化了一些错误条件,因为它们是令人沮丧的bug的来源,并且没有真正起到任何作用。特别是,从不存在的常量中阅读已从通知升级为警告:
1.早期的PHP:假设你错过了引号,实际上想要一个字符串,触发器通知。

  1. PHP/7.2:相同的假设,触发警告。
  2. PHP/8.0:不再猜测,触发致命错误。
    .关键区别在于致命错误会中止脚本,因此不能轻易错过或忽略。
    这个不存在的持续性问题如何适用于这里?好吧,事实证明是常量的有效标识符,只要你不在解析器阻塞的位置使用它:
define('’a’', 'example');
$foo = ['example' => 'OK'];
var_dump(’a’, $foo[’a’]);
string(7) "example"
string(2) "OK"

Demo

相关问题