因为设置上的原因,Wordpress 最好不要使用中文作为标题。我的网站设置上支持中文标题,但是因为更换服务器的缘故,中文标题的文章又出现了无法访问的问题。于是,编写一个工具扫描网站上的所有文章,通过检查标题的 url 是否带有“%”来判断是否有中文。
扫描全部页面的方式是通过扫描全部日期归档链接实现的,类似"https://www.lab-z.com/2022/03/",发送 http 请求之后会对返回的结果进行分析,取出其中的 http://www.lab-z.com/ 为开头的 URL,然后进行检测,如果其中带有 “%”,那么就是带有汉字了。然后就可以根据指示在 WordPress 中手工进行修改。
代码比较简单,有兴趣的可以试试。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.Text.RegularExpressions;
namespace WordPressUrlChecker
{
class Program
{
private static readonly HttpClient client = new HttpClient();
// 定义并初始化一个字符串列表
private static List<string> UrlToCheck = new List<string> {
"https://www.lab-z.com/2024/04/",
// 全部日期
"https://www.lab-z.com/2005/10/"
};
static async Task Main(string[] args)
{
string url = "https://www.lab-z.com/";
//Console.WriteLine(responseBody);
//string pattern = @"(http|https)://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
//https://www.lab-z.com/2006/05/
string pattern = @"https://www\.lab-z\.com/[^\s]*";
foreach (string uString in UrlToCheck) {
Console.WriteLine("Checking in "+uString.ToString());
string responseBody = await GetRequest(uString);
MatchCollection matches = Regex.Matches(responseBody, pattern);
foreach (Match match in matches)
{
string getUrl = match.Value;
// 如果字符串中带有 " 那么就截取它之前的所有字符串
if (getUrl.IndexOf('\"')!=-1) {
getUrl= getUrl.Substring(0, getUrl.IndexOf('\"'));
//Console.WriteLine(getUrl);
}
if (ContainsChinese(getUrl))
{
Console.WriteLine(getUrl);
}
}
}
/*
*/
Console.ReadLine();
}
// 发送 HTTP 请求并且得到服务器返回
static async Task<string> GetRequest(string url)
{
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
}
// 检查字符串是否含有汉字
static bool ContainsChinese(string input)
{
for (int i = 0; i < input.Length; i++)
{
if (input[i] == '%')
return true;
}
return false;
}
}
}