Cách tạo slug trong php

Hàm create_slug() giúp bạn tạo ra một chuỗi không dấu (slug) phục vụ cho quá trình xây dựng liên kết thân thiện với website để viết bài, sản phẩm…

Slug là gì?

Slug là chuỗi không có dấu và các từ được nối với nhau bởi “-“, chuỗi phục vụ cho việc xây dựng liên kết thân thiện (url thân thiện) của các phần như bài viết, sản phẩm…

Ví dụ

unitop-hoc-lap-trinh-web-di-lam

Constructor của hàm create_slug()

Thuật toán. Để tạo chữ không dấu, cần tìm tất cả các biến có thể có dấu của các ký tự đó để chuyển về các ký tự gốc, như â => a, ô => o

Để thực hiện nó, tôi lựa chọn sử dụng hàm

0 để tìm kiếm và thay thế

Để sử dụng hàm trên, bạn cần sao chép mã nguồn của hàm bên trên và chạy nó trước khi sử dụng

";

$title_2 = "Ngành công nghệ thông tin thiếu nhân lực trầm trọng";
echo create_slug($title_2),"
"; ?>

Kết quả sau khi chạy chương trình

cach-hoc-php-hieu-qua
nganh-cong-nghe-thong-tin-thieu-nhan-luc-tram-trong

Tổng kết

Qua bài viết này tôi chia sẻ cho bạn hàm create_slug(). Một chức năng tôi rất hay sử dụng trong các dự án lớn nhỏ và cũng chia sẻ trong chương trình PHP MASTER tại Unitop. vn

Mục đích của việc sử dụng slug (URL ngữ nghĩa) bên cạnh việc cải thiện SEO cho các bài viết của bạn là để ngăn chặn việc người dùng, chẳng hạn như khi tạo một bài viết, sử dụng các ký tự đặc biệt không được phép trong một URL, phù hợp với cách sử dụng . Mục tiêu sử dụng có nghĩa là gì, phụ thuộc vào ngữ cảnh

Trong bài viết này, bạn sẽ học cách slugify một chuỗi trong PHP đúng cách, bao gồm (hoặc không) hỗ trợ (chuyển đổi) cho ký tự cyrilic và ký tự la tinh đặc biệt

Slugify trong PHP

Hàm sau đây cho thấy một cách đơn giản để chuyển đổi văn bản thành một con sên hợp lệ

Lưu ý ký tự đặc biệt bất kỳ sẽ được thay thế bằng ký hiệu -, nếu bạn muốn chuyển chúng sang ký tự tương đương (Ü thành U) thì đọc tiếp

Hỗ trợ ký tự UTF-8

Nếu bạn không gặp phải vấn đề này, có lẽ bạn đang tự hỏi tại sao chức năng trước đó không hoạt động với tất cả các chuỗi?

Để hiểu hành vi này, tôi sẽ cho bạn xem ví dụ sau

echo slugify('Cómo hablar en sílabas');
// Outputs : cmo-hablar-en-slabas

// It would be better for SEO if the URL is instead:
// como-hablar-en-silabas

Điều gì sẽ tốt hơn một hàm slugify chuyển đổi các ký tự không được nhận dạng đó thành ký tự mã hóa thông thường để tạo URL "bình thường"?

Đoạn mã sau được viết bởi Sean Murphy, sẽ cung cấp hỗ trợ cho các ký tự từ tiếng Latinh, tiếng Hy Lạp, tiếng Ukraina, tiếng Ba Lan, v.v. thành "tương đương" trong các ký tự bình thường. Đoạn mã này đã được xuất bản trong Gist gốc mà bạn có thể xem trong Github tại đây

Ghi chú. trong trường hợp bạn không muốn sử dụng một chức năng lớn như vậy cho việc đó, bạn có thể xem giải pháp một dòng được cung cấp ở cuối bài viết cũng hỗ trợ UTF-8 (ít ký tự được biết đến nhất)

Vui lòng xóa khỏi mảng

3 những ký tự mà có lẽ ở quốc gia của bạn sẽ không có ai sử dụng và làm cho mã ngắn hơn

[email protected]>
 * @copyright Copyright 2012 Sean Murphy. All rights reserved.
 * @license http://creativecommons.org/publicdomain/zero/1.0/
 *
 * @param string $str
 * @param array $options
 * @return string
 */
function url_slug($str, $options = array()) {
	// Make sure string is in UTF-8 and strip invalid UTF-8 characters
	$str = mb_convert_encoding((string)$str, 'UTF-8', mb_list_encodings());
	
	$defaults = array(
		'delimiter' => '-',
		'limit' => null,
		'lowercase' => true,
		'replacements' => array(),
		'transliterate' => false,
	);
	
	// Merge options
	$options = array_merge($defaults, $options);
	
	$char_map = array(
		// Latin
		'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C', 
		'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 
		'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ő' => 'O', 
		'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ű' => 'U', 'Ý' => 'Y', 'Þ' => 'TH', 
		'ß' => 'ss', 
		'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c', 
		'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 
		'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ő' => 'o', 
		'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th', 
		'ÿ' => 'y',

		// Latin symbols
		'©' => '(c)',

		// Greek
		'Α' => 'A', 'Β' => 'B', 'Γ' => 'G', 'Δ' => 'D', 'Ε' => 'E', 'Ζ' => 'Z', 'Η' => 'H', 'Θ' => '8',
		'Ι' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', 'Ν' => 'N', 'Ξ' => '3', 'Ο' => 'O', 'Π' => 'P',
		'Ρ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'Y', 'Φ' => 'F', 'Χ' => 'X', 'Ψ' => 'PS', 'Ω' => 'W',
		'Ά' => 'A', 'Έ' => 'E', 'Ί' => 'I', 'Ό' => 'O', 'Ύ' => 'Y', 'Ή' => 'H', 'Ώ' => 'W', 'Ϊ' => 'I',
		'Ϋ' => 'Y',
		'α' => 'a', 'β' => 'b', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'ζ' => 'z', 'η' => 'h', 'θ' => '8',
		'ι' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => '3', 'ο' => 'o', 'π' => 'p',
		'ρ' => 'r', 'σ' => 's', 'τ' => 't', 'υ' => 'y', 'φ' => 'f', 'χ' => 'x', 'ψ' => 'ps', 'ω' => 'w',
		'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'y', 'ή' => 'h', 'ώ' => 'w', 'ς' => 's',
		'ϊ' => 'i', 'ΰ' => 'y', 'ϋ' => 'y', 'ΐ' => 'i',

		// Turkish
		'Ş' => 'S', 'İ' => 'I', 'Ç' => 'C', 'Ü' => 'U', 'Ö' => 'O', 'Ğ' => 'G',
		'ş' => 's', 'ı' => 'i', 'ç' => 'c', 'ü' => 'u', 'ö' => 'o', 'ğ' => 'g', 

		// Russian
		'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'Yo', 'Ж' => 'Zh',
		'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O',
		'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
		'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sh', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'Yu',
		'Я' => 'Ya',
		'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh',
		'з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o',
		'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
		'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sh', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu',
		'я' => 'ya',

		// Ukrainian
		'Є' => 'Ye', 'І' => 'I', 'Ї' => 'Yi', 'Ґ' => 'G',
		'є' => 'ye', 'і' => 'i', 'ї' => 'yi', 'ґ' => 'g',

		// Czech
		'Č' => 'C', 'Ď' => 'D', 'Ě' => 'E', 'Ň' => 'N', 'Ř' => 'R', 'Š' => 'S', 'Ť' => 'T', 'Ů' => 'U', 
		'Ž' => 'Z', 
		'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u',
		'ž' => 'z', 

		// Polish
		'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'o', 'Ś' => 'S', 'Ź' => 'Z', 
		'Ż' => 'Z', 
		'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z',
		'ż' => 'z',

		// Latvian
		'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N', 
		'Š' => 'S', 'Ū' => 'u', 'Ž' => 'Z',
		'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n',
		'š' => 's', 'ū' => 'u', 'ž' => 'z'
	);
	
	// Make custom replacements
	$str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str);
	
	// Transliterate characters to ASCII
	if ($options['transliterate']) {
		$str = str_replace(array_keys($char_map), $char_map, $str);
	}
	
	// Replace non-alphanumeric characters with our delimiter
	$str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str);
	
	// Remove duplicate delimiters
	$str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str);
	
	// Truncate slug to max. characters
	$str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8');
	
	// Remove delimiter from ends
	$str = trim($str, $options['delimiter']);
	
	return $options['lowercase'] ? mb_strtolower($str, 'UTF-8') : $str;
}
?>

Sau đó, bạn có thể sử dụng nó với các ký tự đặc biệt i. e

// Example using French with unwanted characters ('?)
echo "Qu'en est-il français? Ça marche alors?" . "\n";
echo url_slug("Qu'en est-il français? Ça marche alors?") . "\n\n";
// Example using transliteration
echo "Что делать, если я не хочу, UTF-8?" . "\n";
echo url_slug("Что делать, если я не хочу, UTF-8?", array('transliterate' => true)) . "\n\n";
// Example using transliteration on an unsupported language
echo "מה אם ×× ×™ לא רוצה UTF-8 תווים?" . "\n";
echo url_slug("מה אם ×× ×™ לא רוצה UTF-8 תווים?", array('transliterate' => true)) . "\n\n";
// Some other options
echo "This is an Example String. What's Going to Happen to Me?" . "\n";
echo url_slug(
	"This is an Example String. What's Going to Happen to Me?", 
	array(
		'delimiter' => '_',
		'limit' => 40,
		'lowercase' => false,
		'replacements' => array(
			'/\b(an)\b/i' => 'a',
			'/\b(example)\b/i' => 'Test'
		)
	)
);
/*
Output:
This is an example string. Nothing fancy.
this-is-an-example-string-nothing-fancy
Qu'en est-il français? Ça marche alors?
qu-en-est-il-français-ça-marche-alors
Что делать, если я не хочу, UTF-8?
chto-delat-esli-ya-ne-hochu-utf-8
מה אם ×× ×™ לא רוצה UTF-8 תווים?
מה-אם-×× ×™-לא-רוצה-utf-8-תווים
This is an Example String. What's Going to Happen to Me?
This_is_a_Test_String_What_s_Going_to_Ha
*/

Hàm slugify ngắn hơn

Nếu bạn là một trong những nhà phát triển "nghệ nhân" đó (và thậm chí hỗ trợ các ký tự UTF-8, ít quan trọng hơn trong số đó), thì có lẽ bạn cần một giải pháp hoạt động trên một dòng. Chúc bạn may mắn, có một chức năng một dòng hữu ích sẽ xử lý quá trình slugify một cách dễ dàng mà không có quá nhiều phức tạp

________số 8

Như bạn có thể thấy, nó hỗ trợ chuyển đổi (Á sang A, ü sang u, v.v.) các ký tự phức tạp sẽ được đưa vào một URL và bạn không cần phải đưa vào một hàm lớn cho nó

Sên PHP là gì?

Slug PHP là gì? . Để lấy slug, bạn sẽ cần sử dụng một hàm để biến tiêu đề trang có thể đọc được thành một chuỗi có thể được sử dụng như một phần của URI. a lowercase alphanumeric version of the page title, with any spaces removed. To get a slug you will need to use a function to turn a readable page title into a string that can be used as part of a URI.

Làm cách nào để lấy URL slug trong PHP?

Ví dụ về sên URL là gì?

Sên là một phần của URL xác định một trang cụ thể trên trang web ở dạng dễ đọc. Nói cách khác, đó là một phần của URL giải thích nội dung của trang. Ví dụ, đối với bài viết này, URL là https. // sữa chua. com/slug và sên đơn giản là 'slug'.

Một con sên trong mã là gì?

Slug là phần nhận dạng duy nhất của địa chỉ web, thường ở cuối URL . Trong ngữ cảnh của MDN, đó là một phần của URL theo sau "