Google의 CMS는 URL에 쉼표 문자를 인코딩하는 것으로 가정합니다. 따라서 "? values = 1,2,3"이 아닌 CMS는 "? values = 1 % 2c2 % 2c3"을 렌더링합니다. 이 자체는 문제가되지 않지만 이러한 링크가 가리키는 외부 시스템은 인코딩 된 쉼표를 처리 할 수 없으며 쿼리 문자열에 실제 쉼표를 전달하는 경우에만 작동합니다.정규식을 사용하여 href에서 동일한 문자열이 여러 번 나타나는 경우
이미 HTML 사전 렌더링을 처리하고 비 XHTML 호환 마크 업을 정리하는 Regex 정리 도구가 있습니다. 이것은 ASP.Net v2에서 실행되는 오래된 CMS입니다.
내 질문에 쉼표에 대해 "% 2c"의 모든 항목을 교체하는 데 필요한 정규식이 있지만이 텍스트가 앵커 태그 내에있는 경우에만 해당됩니다. % 2c의 모든 인스턴스를 쉽게 바꿀 수 있었지만 URL이 아닌 목적으로 해당 문자열이 사용 된 경우 다른 곳에서 페이지가 손상 될 위험이 있습니다.
.Net 및 System.Text.RegularExpressions를 사용하고 있습니다. 모든 찾기 및 바꾸기 규칙을 포함하는 XML 파일이 있습니다. 이것은 런타임에로드되고 HTML을 정리합니다. 각 규칙은 다음과 같이 구성됩니다.
- 찾을 텍스트 - 예 :
"<script>
" - 텍스트 교체 - 예를 들어, 우리는 다음 각 규칙을 통해 루프와 않는 일부 C 번호를
"<script type='text/javascript'>"
이 :.
// HTML = full page HTML
Regex regex = new Regex(searchTxt, RegexOptions.IgnoreCase);
HTML = regex.Replace(HTML, replaceTxt);
간단한 난 그냥 수 없습니다 우리의 특정 시나리오에 대한 올바른 정규식 구문을 얻을. 당신의 도움을 위해
많은 감사합니다. 여기
가 빌려입니다 당신이 원하는 무엇^(?!<a href=").*(*SKIP)(*FAIL)|(%2c)
: .NET은 PCRE의 정규식이 같은 것을 할 수있는 지원한다면 희망이 내 시나리오
class Program
{
static void Main(string[] args)
{
string html = GetPageHTML();
string regexString = "(<a href=).*|(%2c)";
string replaceTxt = ",";
RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Multiline;
Regex regex = new Regex(regexString, options);
// We are currently using a simple regex.Replace
string cleanHTML = regex.Replace(html, replaceTxt);
// But for this example should we be doing something with the Matches collection?
foreach (Match match in regex.Matches(html))
{
if (match.Success)
{
// do something?
}
}
}
private static string GetPageHTML()
{
return @"<html>
<head></head>
<body>
<a title='' href='http://www.testsite.com/?x=491191%2cy=291740%2czoom=6%2cbase=demo%2clayers=%2csearch=text:WE9%203QA%2cfade=false%2cmX=0%2cmY=0' target='_blank'>A link</a>
<p>We wouldn't want this (%2c) to be replaced</p>
</body>
</html>";
}
}
HttpServerUtility.UrlDecode 시도 했습니까? – Tushar
아니요. 제가 할 수있는 메모리에 문자열의 인스턴스가 없습니다. 나는 HTML 페이지 전체를 가지고 정규 표현식을 사용하여 찾기 및 바꾸기를 효과적으로 수행 할 수 있습니다. –