Помогите перенести функцию php на do "clean url" на C#
Я пытаюсь портировать эту функцию на C#
http://www.phpsnaps.com/snaps/view/clean-url/
У меня проблемы с преобразованием ""~[^-a-z0-9_]+~" (номенклатура паттернов php) в номенклатуру регулярных выражений charp.
<?php
function cleanURL($string)
{
$url = str_replace("'", '', $string);
$url = str_replace('%20', ' ', $url);
// (PROBLEM) substitutes anything but letters, numbers and '_' with separator
$url = preg_replace('~[^\pL0-9_]+~u', '-', $url);
$url = trim($url, "-");
// you may opt for your own custom character map for encoding.
$url = iconv("utf-8", "us-ascii//TRANSLIT", $url);
$url = strtolower($url);
(PROBLEM)
$url = preg_replace('~[^-a-z0-9_]+~', '', $url); // keep only letters, numbers, '_' and separator
return $url;
} // echo cleanURL("Shelly's%20Greatest%20Poem%20(2008)"); // shellys-greatest-poem-2008
?>
Это функция C#:
static String cleanURL(String url)
{
url = url.Replace("'", "");
url = url.Replace("%20", " ");
url = System.Text.RegularExpressions.Regex.Replace(url, "~[^\pL0-9_]+~u", "-");
url = url.Trim(new char[1]{'-'});
Encoding ascii = Encoding.ASCII;
Encoding utf8 = Encoding.UTF8;
byte[] utf8bytes = utf8.GetBytes(url);
byte[] asciiBytes = Encoding.Convert(utf8, ascii, utf8bytes);
char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
url = new string(asciiChars);
url = url.ToLower();
url = System.Text.RegularExpressions.Regex.Replace(url, "~[^-a-z0-9_]+~", "");
return url;
}
Благодарю. Кто-нибудь может мне помочь?
1 ответ
Решение
~ В начале и в конце - это просто маркеры конца шаблона, они не нужны в формате C#
так ~[^-a-z0-9_]~
должно быть просто [^-a-z0-9_]
Буква u в конце первого шаблона заставляет php рассматривать шаблон как UTF8, вам это не нужно.