php 1是一个不是整数的字符串

Hin*_*wen 2 php

我正在使用GET变量,人们通过以下URL访问它:

page?siteID=1
Run Code Online (Sandbox Code Playgroud)

我检查以确保siteID是一个整数,但PHP说它是一个字符串.

如何将其转换为整数?我注意到intval()会将0x1A转换为26,我不想发生这种情况.

Daa*_*aan 9

如果您不想转换变量,只需检查它是否代表数字,您也可以使用该is_numeric函数.或者,或者您可以使用其他答案中描述的转换方法,以最适合您的特定需求为准.

编辑:基于詹姆斯索科尔的评论,它也可能值得看看这个ctype_digit功能.对于您的特定应用程序(看起来您想检查一些页面ID号),这可能比is_numeric功能更合适.


Cur*_*son 9

正如旁注,以便您知道为什么会发生这种情况,这就是正在发生的事情.

当Web浏览器发送GET请求时,它都是文本.URL" http://example.com/page?siteID=1 "实际上是作为单个字符串发送的; 在HTTP请求中,它将是这一行:

GET /page?siteID=1 HTTP/1.0
Run Code Online (Sandbox Code Playgroud)

(http://example.comWeb浏览器使用" "部分来确定要与哪个服务器通信,以及使用哪种网络协议.)

PHP掌握了这一点,并为您解析它做了大量的工作.它根据这些空格(方法" GET",URI" /page?siteID=1"和协议" HTTP/1.1")将它分成三部分,并进一步将URI解析为路径(" /page")和查询参数("siteID = 1"),它进一步分析解析为名称/值对.甚至GET上面引用的整行也只是作为请求传递给HTTP服务器的全文流的一部分.

因此,您将看到将大量字符转换为许多不同部分的大量工作的结果.

如果您真的很好奇,可以使用Wireshark或Firefox Live HTTP Headers插件等工具来查看实际通过网络传递的文本字符串的详细信息.如果您是一名Web开发人员,那值得学习.


Jam*_*col 5

要么转换为int

$id = (int)$_GET['siteID'];
Run Code Online (Sandbox Code Playgroud)

了解字符串到整数转换的规则.或者使用

if (ctype_digit($_GET['siteID'])) { //...
Run Code Online (Sandbox Code Playgroud)

如果你想确定它只包含数字(字符0-9).如果你想要它是一个数字字符串,包括"-1.35e + 105"你可以使用is_numeric().