Fix tag URL encoding for non-ASCII characters

Fixed tag matching issue where tags with spaces and non-ASCII characters (like "Medicine - 醫學") were not working correctly on Vercel.

Changes:
1. Updated getTagSlug() to normalize tags without encoding - Next.js handles URL encoding automatically
2. Added decodeURIComponent() in tag page to decode incoming URL parameters
3. This ensures proper matching between generated slugs and URL parameters

The fix resolves:
- Tag archive pages showing wrong characters
- Articles not being collected under correct tags
- URL display issues with encoded characters

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-19 23:20:04 +08:00
parent 5d3d754252
commit 912c70332e
2 changed files with 12 additions and 8 deletions

View File

@@ -27,14 +27,14 @@ export function getPageBySlug(slug: string): Page | undefined {
}
export function getTagSlug(tag: string): string {
// Normalize spaces and convert to lowercase first
// Normalize spaces and convert to lowercase
// Replace multiple spaces/dashes with single dash
const normalized = tag
// Next.js will handle URL encoding automatically, so we don't encode here
return tag
.toLowerCase()
.replace(/\s+/g, '-')
.replace(/-+/g, '-');
// Encode URI components to handle non-ASCII characters properly
return encodeURIComponent(normalized);
.replace(/-+/g, '-')
.trim();
}
export function getAllTagsWithCount(): { tag: string; slug: string; count: number }[] {