User entered URL validation

Could anyone help me out with some validation code to remove all invalid characters from a string? I was hoping to find a way of using CString.Remove by specifying a range of ASCII numbers to remove. For instance, remove all ASCII chars with code less than 48. Obviously I could go through and say

strURL.Remove(‘ ‘);
strURL.Remove(‘£‘);
strURL.Remove(‘$‘);

and so on but that’s not very efficient and a lot more work! Any help much appreciated!

Cheers,
Will
wjdashwoodAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

jkrCommented:
Why don't you use 'InternetCanonicalizeUrl()' and check the result for 'ERROR_INTERNET_INVALID_URL'?

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
wjdashwoodAuthor Commented:
Never even heard of that before. Excellent! I'll investigate further.

Cheers,
Will
Roshan DavisCommented:
Thatz a nice one!

You can try this also..

IsValidURL()


Syntax
=====

HRESULT IsValidURL(
    LPBC pBC,
    LPCWSTR szURL,
    DWORD dwReserved
);


Parameters
========

pBC
        It should be set to NULL.
szURL
        Address of a string value that contains the full URL to be checked.

dwReserved
        Reserved. Must be set to zero.


Return Value
=========

Returns one of the following values:

S_OK The szURL parameter contains a valid URL.
S_FALSE The szURL parameter does not contain a valid URL.
E_INVALIDARG One of the parameters is invalid.

Function Information
===============

Header Urlmon.h
Import library Urlmon.lib
Minimum availability Internet Explorer 3.0
Minimum operating systems Windows NT 4.0, Windows 95


Rosh :)
Microsoft Azure 2017

Azure has a changed a lot since it was originally introduce by adding new services and features. Do you know everything you need to about Azure? This course will teach you about the Azure App Service, monitoring and application insights, DevOps, and Team Services.

Roshan DavisCommented:
Ooops, the above function is only for validating the URL
wjdashwoodAuthor Commented:
I'm trying to get InternetCanonicalizeUrl() to work but GetLastError simply returns ERROR_INVALID_PARAMETER. Can someone help me with the useage?

Thanks,
Will
jkrCommented:
>>ERROR_INVALID_PARAMETER. Can someone help me with the useage?

How *are* you using it?
wjdashwoodAuthor Commented:
LPDWORD lpdwBufferLength = NULL;
LPTSTR lpszBuffer = NULL;
LPCTSTR lpszUrl = _T("http://www.experts-exchange.com/");

InternetCanonicalizeUrl(lpszUrl,lpszBuffer,lpdwBufferLength,NULL));

DWORD dwLastError = GetLastError();
if (dwLastError == ERROR_INVALID_PARAMETER)
      AfxMessageBox("ERROR_INVALID_PARAMETER");
if (dwLastError == ERROR_INTERNET_INVALID_URL)
      AfxMessageBox("ERROR_INTERNET_INVALID_URL");


I guess I'm not delcaring or passing lpszBuffer and lpdwBufferLength correctly.
jkrCommented:
>>LPDWORD lpdwBufferLength = NULL;
>>LPTSTR lpszBuffer = NULL;

That actually is the problem - the API expects a buffer to receive the output, not a NULL pointer. And, what's worese, the buffer size parameter is a null pointer also.

Make it read

LPCTSTR lpszUrl = _T("http://www.experts-exchange.com/");
DWORD dwBufferLength = 2 * _tcslen ( lpszUrl); // worst case
TCHAR szBuffer [ dwBufferLength];

InternetCanonicalizeUrl(lpszUrl,szBuffer,&dwBufferLength,NULL));


wjdashwoodAuthor Commented:
Many thanks. I'll give that a try.
wjdashwoodAuthor Commented:
I've got it working (I had to declare a size of the szBuffer) but the function doesn't seem to remove invalid characters. Is there a flag I need to set or something?
jkrCommented:
>>but the function doesn't seem to remove invalid characters

Hm, it should *test* for them (at least this was my intention) - removing chars is a bit dangerous, as in approx. 90% of all cases you won't end up with an existing URL
wjdashwoodAuthor Commented:
Well your algorithm in the other question does exactly what I want and probably much faster :)
jkrCommented:
Well, we have a proverb here about 'catching two flies with a single slap' :o)
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
System Programming

From novice to tech pro — start learning today.