默認情況下,Typecho能夠正常工作后,所有文章的URL都會是類似
http://yourdomain.com/index.php/archives/sample.html
這里的index.php對于強迫癥患者影響還是挺大的,其實這里只需要進入Typecho后臺控制面板
點擊 設置->永久鏈接
將 是否使用地址重寫功能 改為 啟用 ,這里可能系統提示不支持地址重寫,選擇強制開啟之類的就行了。
再在 自定義文章路徑 中選擇自己喜歡的URL格式,保存設置后馬上就生效了。
字符串轉換為數組
在PHP中,explode() 函數用于將字符串拆分為數組,根據指定的分隔符將字符串分割成多個部分。
下面是 explode() 函數的語法:
array explode ( string $delimiter , string $string [, int $limit = PHP_INT_MAX ] )
參數說明:
$delimiter:指定的分隔符,用于將字符串拆分成多個部分。
$string:要進行拆分的字符串。
$limit(可選):指定返回的數組元素數量的限制。如果設置了該參數,將返回的數組元素數量不超過該限制。如果省略或設置為 PHP_INT_MAX,則不限制返回的數組元素數量。
下面是一個示例,演示了如何使用 explode() 函數將字符串拆分成數組:
$string = "apple,banana,orange";
$fruits = explode(",", $string);
print_r($fruits);
輸出:
Array
(
[0] => apple
[1] => banana
[2] => orange
)
在上面的示例中,我們使用 , 作為分隔符將字符串 $string 拆分成數組 $fruits。拆分后的數組包含了每個水果作為一個元素。
需要注意的是,explode() 函數是區分大小寫的,因此分隔符和目標字符串中的字母大小寫必須完全匹配才能正確拆分字符串。
數組轉換為字符串
在 PHP 中,join() 和 implode() 函數用于將數組的元素連接成一個字符串。
這兩個函數實際上是同一個函數的別名,它們的作用完全相同,只是函數名不同而已。
下面是 implode() / join() 函數的語法:
string implode ( string $glue , array $pieces )
或
string join ( string $glue , array $pieces )
參數說明:
$glue:指定連接數組元素的字符串。
$pieces:要連接的數組。
返回值:
implode() / join() 函數返回一個字符串,其中包含了連接后的數組元素。
下面是一個示例,演示了如何使用 implode() / join() 函數:
$fruits = array("apple", "banana", "orange");
$string = implode(", ", $fruits);
echo $string;
在上面的示例中,我們使用 , 作為連接字符串的分隔符,將數組 $fruits 的元素連接成一個字符串 $string。
需要注意的是,分隔符是可選的,您可以根據需要選擇合適的分隔符。如果不指定分隔符,implode() / join() 函數將直接將數組元素連接在一起。
總結來說,implode() 和 join() 是用于將數組元素連接成字符串的函數,它們的作用完全相同,只是函數名不同。您可以根據個人偏好選擇使用其中任何一個。
substr
在 PHP 中,substr() 函數用于從字符串中獲取指定的子字符串。
下面是 substr() 函數的語法:
string substr ( string $string , int $start [, int $length ] )
參數說明:
$string:要截取的字符串。
$start:指定截取的起始位置。如果為正數,則表示從字符串的左側開始計數,索引從 0 開始;如果為負數,則表示從字符串的右側開始計數,索引從 -1 開始。
$length(可選):指定截取的長度。如果省略該參數,則截取從起始位置到字符串末尾的所有字符。
返回值:
substr() 函數返回一個字符串,包含了從原始字符串中截取的子字符串。
下面是一些示例,演示了如何使用 substr() 函數:
$string = "Hello, World!";
$substring1 = substr($string, 0, 5); // 從索引位置 0 開始,截取 5 個字符
$substring2 = substr($string, 7); // 從索引位置 7 開始,截取到末尾的所有字符
$substring3 = substr($string, -6); // 從右側第 6 個字符開始,截取到末尾的所有字符
echo $substring1 . "\n"; // 輸出:Hello
echo $substring2 . "\n"; // 輸出:World!
echo $substring3 . "\n"; // 輸出:World!
在上面的示例中,我們使用 substr() 函數從字符串 $string 中截取了不同的子字符串。可以看到,通過指定起始位置和長度,我們可以靈活地截取字符串的不同部分。
需要注意的是,substr() 函數對于多字節字符(如 UTF-8 編碼的字符)可能會出現問題,因為它是按字節長度進行截取的。如果需要處理多字節字符,可以使用 mb_substr() 函數來確保正確處理字符的長度。
strstr
在 PHP 中,strstr() 函數用于在字符串中查找指定的子字符串,并返回從該子字符串開始到字符串末尾的部分。
下面是 strstr() 函數的語法:
string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )
參數說明:
$haystack:要搜索的字符串。
$needle:要查找的子字符串。
$before_needle(可選):一個布爾值,用于指定是否返回 $needle 之前的部分。如果設置為 true,則返回 $needle 之前的部分;如果設置為 false(默認值),則返回 $needle 開始到字符串末尾的部分。
返回值:
strstr() 函數返回一個字符串,包含了從 $needle 開始到字符串末尾的部分。如果找不到 $needle,則返回 false。
下面是一些示例,演示了如何使用 strstr() 函數:
$string = "Hello, World!";
$substring1 = strstr($string, "World"); // 查找 "World" 并返回從它開始到字符串末尾的部分
$substring2 = strstr($string, "World", true); // 查找 "World" 并返回它之前的部分
echo $substring1 . "\n"; // 輸出:World!
echo $substring2 . "\n"; // 輸出:Hello,
在上面的示例中,我們使用 strstr() 函數在字符串 $string 中查找子字符串 "World"。可以看到,通過指定子字符串并選擇是否返回之前的部分,我們可以從原始字符串中獲取所需的部分。
需要注意的是,strstr() 函數對大小寫敏感。如果需要進行大小寫不敏感的搜索,可以使用 stristr() 函數。此外,如果需要處理多字節字符(如 UTF-8 編碼的字符),可以使用 mb_strstr() 函數來確保正確處理字符的長度。
strops
strpos() 函數用于在字符串中查找指定子字符串的第一次出現,并返回它的位置(索引)。
下面是 strpos() 函數的語法:
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
參數說明:
$haystack:要搜索的字符串。
$needle:要查找的子字符串。
$offset(可選):指定搜索的起始位置。如果設置了偏移量,則從該位置開始搜索子字符串。
返回值:
如果找到子字符串,則返回它在 $haystack 中的位置(索引),該位置從 0 開始計數。
如果未找到子字符串,則返回 false。
下面是一個示例,演示了如何使用 strpos() 函數:
$string = "Hello, World!";
$position = strpos($string, "World");
echo $position; // 輸出:7
在上面的示例中,我們使用 strpos() 函數在字符串 $string 中查找子字符串 "World"。函數返回子字符串的起始位置,即索引值 7。
需要注意的是,strpos() 函數對大小寫敏感。如果需要進行大小寫不敏感的搜索,可以使用 stripos() 函數。此外,如果需要查找子字符串的最后一次出現位置,可以使用 strrpos() 函數。
str_replace
str_replace() 函數用于在字符串中替換指定的子字符串。
下面是 str_replace() 函數的語法:
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ]
參數說明:
$search:要搜索并替換的子字符串或子字符串數組。可以是一個字符串或一個字符串數組。
$replace:用于替換匹配子字符串的新字符串或新字符串數組。可以是一個字符串或一個字符串數組。
$subject:要在其中進行替換的原始字符串或原始字符串數組。可以是一個字符串或一個字符串數組。
$count(可選):如果提供了此參數,并且是一個變量,它將接收被替換的次數。
返回值:
如果 $subject 是一個字符串,則返回一個字符串,其中所有匹配的子字符串都被替換為相應的新字符串。
如果 $subject 是一個數組,則返回一個數組,其中所有元素都被替換為相應的新字符串。
下面是一些示例,演示了如何使用 str_replace() 函數:
$string = "Hello, World!";
$newString = str_replace("World", "PHP", $string);
echo $newString; // 輸出:Hello, PHP!
在上面的示例中,我們使用 str_replace() 函數將字符串 $string 中的子字符串 "World" 替換為 "PHP",并將替換后的結果存儲在 $newString 變量中。
str_replace() 函數還可以處理數組。下面是一個數組示例:
$fruits = array("apple", "banana", "orange");
$newFruits = str_replace("banana", "kiwi", $fruits);
print_r($newFruits);
輸出:
Array
(
[0] => apple
[1] => kiwi
[2] => orange
)
在上面的示例中,我們使用 str_replace() 函數將數組 $fruits 中的元素 "banana" 替換為 "kiwi",并將替換后的新數組存儲在 $newFruits 變量中。
需要注意的是,str_replace() 函數對大小寫敏感。如果需要進行大小寫不敏感的替換,可以使用 str_ireplace() 函數。
trim
在 PHP 中,trim() 函數用于去除字符串兩端的空白字符或指定的字符。
下面是 trim() 函數的語法:
string trim ( string $string [, string $characters = " \t\n\r>string trim ( string $string [, string $characters = " \t\n\r\0\x0B" ] )<\x0B" ] )
參數說明:
$string:要進行修剪的字符串。
$characters(可選):指定要移除的字符。默認情況下,會移除字符串兩端的空白字符(包括空格、制表符、換行符、回車符、空字符和垂直制表符)。
返回值:
trim() 函數返回一個修剪后的字符串。
下面是一些示例,演示了如何使用 trim() 函數:
$string = " Hello, World! ";
$trimmedString = trim($string);
echo $trimmedString; // 輸出:Hello, World!
在上面的示例中,我們使用 trim() 函數去除字符串 $string 兩端的空白字符,得到修剪后的字符串。
您還可以通過指定第二個參數來自定義要移除的字符。例如:
$string = "-Hello, World!--";
$trimmedString = trim($string, '-');
echo $trimmedString; // 輸出:Hello, World!
在上面的示例中,我們使用 trim() 函數去除字符串 $string 兩端的連字符(-),得到修剪后的字符串。
需要注意的是,trim() 函數只移除字符串兩端的字符,不會修改字符串中間的字符。如果需要移除字符串中間的特定字符,可以使用其他字符串處理函數(如 str_replace())來實現。
strip_tags
strip_tags() 函數用于從字符串中去除 HTML 和 PHP 標簽,只保留純文本內容。
下面是 strip_tags() 函數的語法:
string strip_tags ( string $str [, string $allowable_tags ] )
參數說明:
$str:要去除標簽的字符串。
$allowable_tags(可選):指定允許保留的標簽。如果提供此參數,它將指定允許保留的標簽列表,其他標簽將被完全移除。
返回值:
strip_tags() 函數返回一個去除了標簽的字符串。
下面是一個示例,演示了如何使用 strip_tags() 函數:
$string = "<p>Hello, <b>World</b>!</p>";
$strippedString = strip_tags($string);
echo $strippedString; // 輸出:Hello, World!
在上面的示例中,我們使用 strip_tags() 函數從字符串 $string 中去除 HTML 標簽,得到純文本內容。
您還可以通過提供第二個參數來指定允許保留的標簽。例如:
$string = "<p>Hello, <b>World</b>! This is a <a href='example.com'>link</a>.</p>";
$allowedTags = "<b><a>";
$strippedString = strip_tags($string, $allowedTags);
echo $strippedString; // 輸出:Hello, <b>World</b>! This is a <a href='example.com'>link</a>.
在上面的示例中,我們使用 strip_tags() 函數從字符串 $string 中去除除 <b> 和 <a> 標簽以外的所有標簽,并保留這兩個標簽。
需要注意的是,strip_tags() 函數只能去除 HTML 和 PHP 標簽,不能過濾或處理其他類型的標記語言。如果需要更復雜的標記處理,可以考慮使用專門的 HTML 解析庫或過濾器。
獲取get請求的參數
$_SERVER 是一個 PHP 超全局變量,用于存儲有關服務器和請求的信息。它是一個關聯數組,包含了諸如請求頭、路徑、腳本位置、服務器信息等等的鍵值對。
$_SERVER['QUERY_STRING']:當前請求的查詢字符串部分。
parse_str() 函數用于將查詢字符串解析為變量并存儲在數組中。
parse_str($_SERVER['QUERY_STRING'], $arr);
這行代碼將會解析 $_SERVER['QUERY_STRING'] 中的查詢字符串,并將解析后的變量存儲在 $arr 數組中。
例如,假設當前請求的 URL 是 example.com/index.php?name=John&age=25,$_SERVER['QUERY_STRING'] 的值為 "name=John&age=25"。使用 parse_str() 函數后,$arr 數組將包含以下內容:
$arr = [
'name' => 'John',
'age' => '25'
];
http_build_query
http_build_query() 函數用于將數組轉換為 URL 編碼的查詢字符串。
下面是 http_build_query() 函數的語法:
string http_build_query ( mixed $query_data [, string $numeric_prefix = null [, string $arg_separator = '&' [, int $enc_type = PHP_QUERY_RFC1738 ]]] )
參數說明:
$query_data:要轉換為查詢字符串的數組或對象。
$numeric_prefix(可選):如果數組具有數字索引鍵,則此參數指定數字索引鍵的前綴。默認為 null。
$arg_separator(可選):用于分隔查詢參數的字符串。默認為 &。
$enc_type(可選):指定編碼類型。可選值為 PHP_QUERY_RFC1738(默認)和 PHP_QUERY_RFC3986。
返回值:
http_build_query() 函數返回一個 URL 編碼的查詢字符串。
下面是一個示例,演示了如何使用 http_build_query() 函數:
$data = array(
'name' => 'John',
'age' => 25,
'city' => 'New York'
);
$queryString = http_build_query($data);
echo $queryString;
// 輸出:name=John&age=25&city=New+York
在上面的示例中,我們將數組 $data 轉換為 URL 編碼的查詢字符串。每個數組元素都會轉換為一個查詢參數,并使用 & 分隔。
parse_url
parse_url() 函數用于解析 URL 并返回其各個組成部分的關聯數組。
下面是 parse_url() 函數的語法:
mixed parse_url ( string $url [, int $component = -1 ] )
參數說明:
$url:要解析的 URL 字符串。
$component(可選):指定要返回的組件。默認值為 -1,返回包含所有組件的關聯數組。可選值為 PHP_URL_SCHEME、PHP_URL_HOST、PHP_URL_PORT、PHP_URL_USER、PHP_URL_PASS、PHP_URL_PATH、PHP_URL_QUERY、PHP_URL_FRAGMENT,分別代表不同的組件。
返回值:
如果 $component 參數為 -1,則返回一個包含 URL 各個組件的關聯數組。如果指定了 $component 參數,則返回對應的組件字符串。
下面是一個示例,演示了如何使用 parse_url() 函數:
$url = "https://www.example.com:8080/path/to/page?query=string#fragment";
$urlComponents = parse_url($url);
echo $urlComponents['scheme']; // 輸出:https
echo $urlComponents['host']; // 輸出:www.example.com
echo $urlComponents['port']; // 輸出:8080
echo $urlComponents['path']; // 輸出:/path/to/page
echo $urlComponents['query']; // 輸出:query=string
echo $urlComponents['fragment']; // 輸出:fragment
在上面的示例中,我們使用 parse_url() 函數解析了 URL 字符串 $url,并將各個組件存儲在關聯數組 $urlComponents 中。然后,我們可以通過訪問數組元素來獲取特定的組件值。
如果只想獲取單個組件的值,可以在調用 parse_url() 函數時指定 $component 參數。例如,如果只想獲取主機名,可以這樣做:
$url = "https://www.example.com/path/to/page";
$host = parse_url($url, PHP_URL_HOST);
echo $host; // 輸出:www.example.com
在上面的示例中,我們使用 parse_url($url, PHP_URL_HOST) 僅返回 URL 的主機名。
需要注意的是,parse_url() 函數只能解析標準格式的 URL,例如 http://example.com 或 https://www.example.com。對于非標準格式的 URL,解析結果可能會有所不同。
function xss_clean($data) { // Fix &entity\n; $data=str_replace(array('&','<','>'),array('&','<','>'),$data); $data=preg_replace('/(&#*\w+)[\x00-\x20]+;/u','$1;',$data); $data=preg_replace('/(&#x*[0-9A-F]+);*/iu','$1;',$data); $data=html_entity_decode($data,ENT_COMPAT,'UTF-8'); // Remove any attribute starting with "on" or xmlns $data=preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu','$1>',$data); // Remove javascript: and vbscript: protocols $data=preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu','$1=$2nojavascript...',$data); $data=preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu','$1=$2novbscript...',$data); $data=preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u','$1=$2nomozbinding...',$data); // Only works in IE: <span style="width: expression(alert('Ping!'));"></span> $data=preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i','$1>',$data); $data=preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i','$1>',$data); $data=preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu','$1>',$data); // Remove namespaced elements (we do not need them) $data=preg_replace('#</*\w+:\w[^>]*+>#i','',$data); do { // Remove really unwanted tags $old_data=$data; $data=preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#i','',$data); }while($old_data!==$data); // we are done... return $data; }
//php防注入和XSS攻擊通用過濾. function SafeFilter (&$arr) { $ra=Array('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/','/script/','/javascript/','/vbscript/','/expression/','/applet/','/meta/','/xml/','/blink/','/link/','/style/','/embed/','/object/','/frame/','/layer/','/title/','/bgsound/','/base/','/onload/','/onunload/','/onchange/','/onsubmit/','/onreset/','/onselect/','/onblur/','/onfocus/','/onabort/','/onkeydown/','/onkeypress/','/onkeyup/','/onclick/','/ondblclick/','/onmousedown/','/onmousemove/','/onmouseout/','/onmouseover/','/onmouseup/','/onunload/'); if (is_array($arr)) { foreach ($arr as $key => $value) { if (!is_array($value)) { if (!get_magic_quotes_gpc()) //不對magic_quotes_gpc轉義過的字符使用addslashes(),避免雙重轉義。 { $value = addslashes($value); //給單引號(')、雙引號(")、反斜線(\)與 NUL(NULL 字符)加上反斜線轉義 } $value = preg_replace($ra,'',$value); //刪除非打印字符,粗暴式過濾xss可疑字符串 $arr[$key] = htmlentities(strip_tags($value)); //去除 HTML 和 PHP 標記并轉換為 HTML 實體 } else { SafeFilter($arr[$key]); } } } }
*請認真填寫需求信息,我們會在24小時內與您取得聯系。