optimusprime
08.Aralk.2014, 22:04
url_slug fonksiyonu:
<?php
/**
* Create a web friendly URL slug from a string.
*
* Although supported, transliteration is discouraged because
* 1) most web browsers support UTF-8 characters in URLs
* 2) transliteration causes a loss of information
*
* @author Sean Murphy <[email protected]>
* @copyright Copyright 2012 Sean Murphy. All rights reserved.
* @license https://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;
}
rnek kullanm
<?php
include('url_slug.php');
header('Content-type: text/plain; charset=utf-8');
// Basic usage
echo "This is an example string. Nothing fancy." . "\n";
echo url_slug("This is an example string. Nothing fancy.") . "\n\n";
// Example using French with unwanted characters ('?)
echo "Qu'en est-il franais? a marche alors?" . "\n";
echo url_slug("Qu'en est-il franais? 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 franais? a marche alors?
qu-en-est-il-franais-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
*/
<?php
/**
* Create a web friendly URL slug from a string.
*
* Although supported, transliteration is discouraged because
* 1) most web browsers support UTF-8 characters in URLs
* 2) transliteration causes a loss of information
*
* @author Sean Murphy <[email protected]>
* @copyright Copyright 2012 Sean Murphy. All rights reserved.
* @license https://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;
}
rnek kullanm
<?php
include('url_slug.php');
header('Content-type: text/plain; charset=utf-8');
// Basic usage
echo "This is an example string. Nothing fancy." . "\n";
echo url_slug("This is an example string. Nothing fancy.") . "\n\n";
// Example using French with unwanted characters ('?)
echo "Qu'en est-il franais? a marche alors?" . "\n";
echo url_slug("Qu'en est-il franais? 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 franais? a marche alors?
qu-en-est-il-franais-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
*/