提问人:troppapolvere 提问时间:10/7/2023 最后编辑:Your Common Sensetroppapolvere 更新时间:10/9/2023 访问量:44
PHP在使用奇怪的引号时遇到障碍
PHP snag when using strange quotes
问:
复制一个 mySQL 驱动的应用程序及其网页(在 PHP 中),我花了 2 天时间调试以下代码所示的问题。当然,2个“不起作用”注释不适用于源服务器(一切正常),但适用于没有任何工作的目标服务器! 网页不分青红皂白地使用单(十六进制 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>";
?>
我期望网页也能在目标服务器上不加修改地工作
答:
0赞
Álvaro González
10/9/2023
#1
如果您更换了服务器,但没有彻底查看 PHP 设置,那么您很可能依赖于已更改的默认值,尤其是与错误报告相关的默认值。你的代码从来都不是完全正确的,它部分地工作纯粹是偶然的,但你现在才意识到。
PHP 一直在强化一些错误条件,因为它们是令人沮丧的错误的来源,并没有真正起到任何作用。特别是,从不存在的常量读取已从通知提升为警告:
- 早期的 PHP:假设你错过了引号,实际上想要一个字符串,触发通知。
- PHP/7.2:相同的假设,触发警告。
- PHP/8.0:不再猜测,触发致命错误。
...主要区别在于致命错误会中止脚本,因此不能轻易遗漏或忽略。
这个不存在的常量问题如何适用于此处?好吧,事实证明,这是常量的有效标识符,只要您不在解析器阻塞的位置使用它:’
define('’a’', 'example');
$foo = ['example' => 'OK'];
var_dump(’a’, $foo[’a’]);
string(7) "example"
string(2) "OK"
评论