如何在url中传递php包含的位置?
我有大量文件,每个文件中都有几个id。例如,file1.php包含许多段落,每个段落都有一个唯一的id。(id=“1”,id=“2”,id=“3”等)。我希望能够创建指向页面的链接(page a.php)并在链接的url中传递其中一个id的位置,以在php包含页面a.php中显示。我要查找的结果是,整个文件(file1.php)显示在页面a.php中,并突出显示url中传递的特定id。这可能吗?或者我需要使用Java脚本和iframe吗 以下是我的结论:如何在url中传递php包含的位置?,php,Php,我有大量文件,每个文件中都有几个id。例如,file1.php包含许多段落,每个段落都有一个唯一的id。(id=“1”,id=“2”,id=“3”等)。我希望能够创建指向页面的链接(page a.php)并在链接的url中传递其中一个id的位置,以在php包含页面a.php中显示。我要查找的结果是,整个文件(file1.php)显示在页面a.php中,并突出显示url中传递的特定id。这可能吗?或者我需要使用Java脚本和iframe吗 以下是我的结论: The url: http://mydo
The url: http://mydomain/thispage.php?xul=http://mydomain.com/folder1/folder2/file.php&id=Abc150:176
守则:
Stylesheet .vrsehilite{styling}
<script type="text/javascript">var x = <?php echo json_encode($_GET["id"]); ?>;</script>
<?php
$invdmn = "<h2>Error: Invalid Domain</h2>";
$filnf = "<h2>Error: File Not Found</h2>";
$pthinv = "<h2>Error: The Path is invalid</h2>";
$idinv = "<h2>Error: The ID is invalid</h2>";
$oops = "<br/><h2>Oops! Something went wrong.<br/><br/>Please click the back button or use the menu to go to a new page.</h2>";
$testdomain = substr_compare ($_GET['xul'],"http://mydomain.com",0,20,FALSE); //make sure the domain name is correct
if ($testdomain == 0) {
$flurl = $_GET['xul'];
} else {
echo $invdmn . " " . $oops;
}
$flurl_headers = @get_headers ($flurl);
if ($flurl_headers[0] == 'HTTP/1.1 404 Not Found') {
echo $filnf . " " . $oops; //Make sure the file exist
} else {
$surl = str_replace (".com/",".com/s/",$flurl);
} //add some characters to url at point to explode
list($url1, $path) = explode ("/s/",$surl); //explode into array of 2 [0]url to domain [1] path
$testpath = substr_compare ($path,"file1/file2/",0,10,FALSE); //make sure the path is correct
if ($testpath == "0") {
$aid = preg_match ("/^[A-Z][a-z]{2}(?:[1-9][0-9]?|1[0-4][0-9]|150):(?:[1-9][0-9]?|1[0-6][0-9]|17[0-6])$/", $_GET['id']);
} else { //make sure the id is valid
echo $pthinv . " " . $oops;
}
if ($aid == 1) {
include($path);
echo "<script type='text/javascript'>";
echo "document.getElementById(x).className = 'vrsehilite';";
echo "document.getElementById(x).scrollIntoView();";
echo "window.scrollBy(0,-100);";
echo "</script>";
} else {
echo $idinv . " " . $oops;
}
?>
Stylesheet.vrsehilite{styleing}
var x=;
永远不要包含用户提交的任意文件。相反,您应该只包含预定义的选择集中的文件。也许是这样的:
PHP
或者,您可以使用正则表达式仅接受某些文件名,在本例中是1个或多个小写字母,后跟0个或多个数字
$m = array ();
if ( preg_match ('#^http://domain.example/folder1/folder2/([a-z]+[0-9]*\\.php)$#', $m)
&& file_exists ($m[1])) {
include $m[1];
} else {
/* Page not found */
}
您可能需要检查include的返回值。您可能还希望将文件夹移动到子模式(…)
,或使用正则表达式作为文件夹名称
如果您只需要突出显示页面中的某个段落,那么应该添加一个指向该段落的id
的URL片段
,并添加CSS来设置其样式。例如:
统一资源定位地址
http://domain.example?id=1#p1
HTML
这是目标段落。
CSS
p:target{/*设置目标元素的样式*/}
Stack Overflow不是一个请求代码的地方,它更像是一个展示代码的地方,让人们帮助您解决问题以找到解决方案。所以要回答您的问题,是的,这是可能的。好的,对不起。我对php和这个网站都是新手。我能够在url中传递一个变量并将其回显到页面上,但不确定如何将其回显到我放入url中的phpinclude中,如下所示:我使用“youuse conditionalif
语句将其回显到页面上,这样做类似于if($\u GET['id']==1){在此处显示这段代码}
等。但您确实必须清理所有用户输入。如果您需要更多帮助,请询问:-)谢谢您的输入。我非常感谢。在这种情况下,文件太多(31175)为设置数组。也许我需要使用一些条件语句来确保根路径来自我的站点?所有文件的路径中都有域和2个文件夹。然后,在将变量输入include语句之前,我可以使用一些代码剥离域。这是一个好计划还是更有效eeded?我确实使用了id来切换类。好的,谢谢,我在问题中更改了代码。我的做法与您的建议稍有不同,但认为它的作用是相同的?它确实使用了相对路径。我是否也应该对照正则表达式检查路径?文件名都是字母,但长度不同。id是ll的格式相同,但长度也不同。3letters1-150:1-176我没有检查文件是否存在,因为我将是编写此页面链接的人,并在编写代码时检查每个链接。错误的链接只会导致空格或错误,对吗?再次查看后,我认为确保文件存在将有助于e一个好主意。这将确保它来自我的网站。我的代码并不能真正做到这一点。有人可以简单地将我的域放在字段中,这并不重要,因为它在包含之前已被剥离。我不确定如何编写这部分代码,但会查找它。再次感谢。在测试域名时,您需要添加一个尾随斜杠,除非你想要http://mydomain.com.otherdomain.com/...
直接浏览。其余部分似乎过于复杂且容易出错。我的答案大致相同。使用简单的regexp测试url和id,测试文件是否存在,然后将其包括在内。@rolo:顺便说一下,我会使用预验证id
g_匹配('/^[a-z]{3}(\d+):(\d+)$/i',$m)
,然后检查每个数字($m[1]
,$m[2]
)是否在范围内。这在我看来似乎容易多了。
$m = array ();
if ( preg_match ('#^http://domain.example/folder1/folder2/([a-z]+[0-9]*\\.php)$#', $m)
&& file_exists ($m[1])) {
include $m[1];
} else {
/* Page not found */
}
<p id=p1>This is the target paragraph.
p:target { /* Style the targeted <p> element */ }