template<typename STR> bool InitCanonical(const STR& input_spec, std::string* canonical, url_parse::Parsed* parsed) { // Reserve enough room in the output for the input, plus some extra so that // we have room if we have to escape a few things without reallocating. canonical->reserve(input_spec.size() + 32); url_canon::StdStringCanonOutput output(canonical); bool success = url_util::Canonicalize( input_spec.data(), static_cast<int>(input_spec.length()), NULL, &output, parsed); output.Complete(); // Must be done before using string. return success; } template<typename STR> bool InitCanonical(const STR& input_spec, std::string* canonical, url_parse::Parsed* parsed) { // Reserve enough room in the output for the input, plus some extra so that // we have room if we have to escape a few things without reallocating. canonical->reserve(input_spec.size() + 32); url_canon::StdStringCanonOutput output(canonical); bool success = url_util::Canonicalize( input_spec.data(), static_cast<int>(input_spec.length()), NULL, &output, parsed); output.Complete(); // Must be done before using string. return success; } 在函数InitCanonical中,调用了url_util命名空间的Canonicalize( -> DoCanonicalize)进行解析,主要的解析过程在url_parse中完成。 了解了解析过程,我们用起来也就很快了,其实也没什么难度,就是几个方法,挺简单 的: 以下的一些方法是判断解析的URL中是否包含这些元素: 在函数InitCanonical中,调用了url_util命名空间的Canonicalize( -> DoCanonicalize)进行解析,主要的解析过程在url_parse中完成。 了解了解析过程,我们用起来也就很快了,其实也没什么难度,就是几个方法,挺简单 的: 以下的一些方法是判断解析的URL中是否包含这些元素:
|