1,生成百度SEO的sitemap
2,xml的url问题 处理
3,实例代码
<?php
/**
* 生成xml的url问题,( ? & 与 空格处理)
*/
$url_prefix = "http://www.baidu.com/xxx/?brand=";
// 1, urlencode($brand) 针对 [ 空格 ] 处理
$brand = '10 IQ';
$bank = urlencode($brand);
// 2, htmlentities($url) 针对 [ ? & ] 处理
$url = "http://www.baidu.com/xxx/?brand=" . urlencode($brand);
$end_result = htmlentities($url);
var_dump($end_result);
// -- --------------------------------------------
/**
* 把特定格式的数组转化成XML
*
* @param $arr array 数组格式如下
* [1430]=>
* array {
* ["loc"]=>"http://www.xxx.com/?brand=xxx", // url
* ["lastmod"]=>"2019/05/24", // 时间戳
* ["changefreq"]=>"weekly", // weekly固定
* ["priority"]=>"1", // 权重
* }
* @param string $rootNodeName 最外层节点(根节点)
* @return string
*/
function arrToXml($arr, $rootNodeName = 'sitemapindex')
{
$Dom = empty($Dom) ? new DOMDocument('1.0', 'utf-8') : $Dom;
// 根节点
$root_node = $Dom->createElement($rootNodeName);
$Dom->appendChild($root_node);
//第一个节点
$firstNodeName = key($arr);
//循环节点
foreach ($arr[$firstNodeName] as $value) {
$firstNode = $Dom->createElement($firstNodeName);
$root_node->appendChild($firstNode);
// htmlentities将id=12&backUrl=%2Ftrends%2F转义
$locNode = $Dom->createElement("loc", htmlentities($value["loc"]));
$firstNode->appendChild($locNode); // loc网址
$lastmodNode = $Dom->createElement('lastmod', $value["lastmod"]);
$firstNode->appendChild($lastmodNode); // lastmod更新时间
$changefreqNode = $Dom->createElement("changefreq", $value["changefreq"]);
$firstNode->appendChild($changefreqNode); // changefreq更新频率 // weekly固定
$priorityNode = $Dom->createElement("priority", $value["priority"]);
$firstNode->appendChild($priorityNode); // priority权重值 // 首页--1 二级栏目/sitemap列表--0.8 筛选--0.6 内容页--0.4
}
$Dom->formatOutput = true;//将特殊形式输出出来
$result = $Dom->saveXML();
return $result;
}
// -----------------------------------------------------------------------------
// 标准的sitemap,少 changefreq更新频率 与 priority权重值
function arrToXml_all($arr, $rootNodeName = 'sitemapindex')
{
$Dom = empty($Dom) ? new DOMDocument('1.0', 'utf-8') : $Dom;
// 根节点
$root_node = $Dom->createElement($rootNodeName);
$Dom->appendChild($root_node);
//第一个节点
$firstNodeName = key($arr);
//循环节点
foreach ($arr[$firstNodeName] as $value) {
$firstNode = $Dom->createElement($firstNodeName);
$root_node->appendChild($firstNode);
$locNode = $Dom->createElement("loc", $value["loc"]);
$firstNode->appendChild($locNode);
$lastmodNode = $Dom->createElement('lastmod', $value["lastmod"]);
$firstNode->appendChild($lastmodNode);
}
$Dom->formatOutput = true;//将特殊形式输出出来
$result = $Dom->saveXML();
return $result;
}
// -----------------------------------------------------------------------------
/**
* 输出xml数据到xml文件中
*
* @param $file string 文件名 【sitemap/sitemap.xml】
* @param $xml_str
* @return bool|int
*/
function outXmlFile($file, $xml_str)
{
echo "生成 ", $file, " 成功!", PHP_EOL;
return file_put_contents($file, $xml_str);
}
$array = array(
0 => array(
"loc" => "http://www.xxx.com/?brand=xxx", // url
"lastmod" => "2019/05/24", // 时间戳
"changefreq" => "weekly", // weekly固定
"priority" => "1", // 权重
),
// . . .
);
arrToXml($array, "urlset");
outXmlFile("http://www.xxx.com/" . '/sitemap_' . $this->file_number . '.xml', $return);