主要目的是通过将变量传递给url并将其显示到主页来从数据库中获取所有类别列表。我省略了一些代码,我试图澄清。
1.我可以排除encodeHtml()方法,对我来说太难理解
2.我没有专门编写这部分代码并且有4天的头脑
foreach($cats as $cat) {
echo "<li><a href=\"/?page=catalogue&category=".$cat['id']."\"";//here id is 'category id' from database. this full line will echo what?
echo Helper::getActive(array('category' => $cat['id']));//it will output what ?
echo ">";
echo Helper::encodeHtml($cat['name']);//as from ur answer can we omit encodeHTML() method and use htmlspecialchars($cat['name']); instead ?
echo "</a>
3.更容易理解
在我们的数据库中,我们有'id'和'name'的catagory列表
/*below is the code in header section of template */
<?php
$objCatalogue = new Catalogue();// creating object of Catalogue class
$cats = $objCatalogue->getCategories(); // this gets all categories from database
<h2>Categories</h2>
<?php
foreach($cats as $cat) {
echo "<li><a href=\"/?page=catalogue&category=".$cat['id']."\"";
echo Helper::getActive(array('category' => $cat['id']));
echo ">";
echo Helper::encodeHtml($cat['name']);
echo "</a></li>";
}
?>
/*below is the helper class which is Helper.php */
public static function getActive($page = null) {
if(!empty($page)) {
if(is_array($page)) {
$error = array();
foreach($page as $key => $value) {
if(Url::getParam($key) != $value) //getParam takes name of the parameter and returns us the value by $_GET
{
array_push($error, $key);
}
}
return empty($error) ? " class=\"act\"" : null;
}
}
//CHECK THIS LINE BROTHER
return $page == Url::currentPage() ? " class=\"act\"" : null;// url::currentPage returns the current page but what is 'class =act ' :(
}
public static function encodeHTML($string, $case = 2) {
switch($case) {
case 1:
return htmlentities($string, ENT_NOQUOTES, 'UTF-8', false);
break;
case 2:
$pattern = '<([a-zA-Z0-9\.\, "\'_\/\-\+~=;:\(\)?&#%![\]@]+)>';
// put text only, devided with html tags into array
$textMatches = preg_split('/' . $pattern . '/', $string);
// array for sanitised output
$textSanitised = array();
foreach($textMatches as $key => $value) {
$textSanitised[$key] = htmlentities(html_entity_decode($value, ENT_QUOTES, 'UTF-8'), ENT_QUOTES, 'UTF-8');
}
foreach($textMatches as $key => $value) {
$string = str_replace($value, $textSanitised[$key], $string);
}
return $string;
break;
}
}
答案 0 :(得分:0)
首先,在您的网址(/?page=catalogue&category=
)中,您不需要放置&
,因为这是一个HTML实体,用于在网页中实际显示&符号。只需使用/?page=catalogue&category=
。
其次,您可以使用urlencode()
准备要在网址中发送的字符串,并在另一端使用urldecode()
。
在回答您的第一点时,您需要确保在用于代码之前清除用户的任何内容(无论是通过$_POST
还是$_GET
),还是输出到网页,或用于数据库查询。在输出到网页之前使用htmlspecialchars()
进行清理,在将用户输入输入查询之前使用预备语句。
在回答您的第二点时,请阅读我上面提供的链接中的文档。只需阅读htmlspecialchars()
上的文档即可为您提供帮助。
希望这有帮助。
答案 1 :(得分:0)
好吧。
<?php
foreach($cats as $cat) {
echo "<li><a href=\"/?page=catalogue&category=".$cat['id']."\"";
echo Helper::getActive(array('category' => $cat['id']));
echo ">";
echo Helper::encodeHtml($cat['name']);
echo "</a></li>";
}
?>
我只是有点撇开它,因为说实话,如果你真的想要学习所有这些,你应该把你不理解的每一段代码都搞砸了,这就是我们所有人学习的方式。
<li>
锚点的<a>
列表项。通过查看getActive:它看起来像是一个检查url某个值的函数,因此它可以确定要显示的页面。它还会检查网址是否包含错误。
通过lookat encodeHtml():它看起来像是一个函数,可以确保你试图放在屏幕上的任何文本都不会造成伤害。在某些情况下,人们会尝试让您的服务器打印可能损害用户的javascript(通过将个人数据发送到某个地方)。 encodeHtml()将确保不会通过从您要发送到页面的文本中删除某些字符来完成此类操作。
使用GOOGLE。