문자열 변수의 링크가 외부 변수인지 여부를 어떻게 확인할 수 있습니까? 이 문자열은 사이트 콘텐츠 (예 : 댓글, 기사 등)입니다.rel = "external"를 HTML 문자열의 외부 링크에 프로그래밍 방식으로 추가하려면 어떻게해야합니까?
만약 그렇다면 rel
속성에 external
값을 어떻게 추가합니까? 이 속성이없는 경우 rel="external"
을 추가 하시겠습니까?
문자열 변수의 링크가 외부 변수인지 여부를 어떻게 확인할 수 있습니까? 이 문자열은 사이트 콘텐츠 (예 : 댓글, 기사 등)입니다.rel = "external"를 HTML 문자열의 외부 링크에 프로그래밍 방식으로 추가하려면 어떻게해야합니까?
만약 그렇다면 rel
속성에 external
값을 어떻게 추가합니까? 이 속성이없는 경우 rel="external"
을 추가 하시겠습니까?
HTML 파서는 입력 필터링에 적합하지만 출력을 수정하기 위해서는 단순한 정규식 솔루션의 성능이 필요합니다. 이 경우 콜백 정규식은 다음을 수행합니다.
$html = preg_replace_callback("#<a\s[^>]*href="(http://[^"]+)"[^>]*>#",
"cb_ext_url", $html);
function cb_ext_url($match) {
list ($orig, $url) = $match;
if (strstr($url, "http://localhost/")) {
return $orig;
}
elseif (strstr($orig, "rel=")) {
return $orig;
}
else {
return rtrim($orig, ">") . ' rel="external">';
}
}
좀 더 세밀한 검사가 필요할 것입니다. 하지만 이것이 일반적인 접근 방식입니다.
SimpleXML과 같은 XML 구문 분석기를 사용하십시오. 정규식은 XML/HTML 구문 분석을 수행하지 않으며, 다음을 수행 할 때 어떤 일이 발생하는지 완벽하게 설명합니다. RegEx match open tags except XHTML self-contained tags.
입력을 XML로 구문 분석하고, 파서를 사용하여 필요한 요소를 선택하고, 파서를 사용하여 속성을 편집 한 다음 다시 추출합니다. 정규식은 나를 울게 만들면서
그것은
<?php
$xmlString = "This is where the HTML of your site should go. Make sure it's valid!";
$xml = new SimpleXMLElement($xmlString);
foreach($xml->getElementsByTagName('a') as $a)
{
$attributes = $a->attributes();
if (isThisExternal($attributes['href']))
{
$a['rel'] = 'external';
}
}
echo $xml->asXml();
?>
하지만 정규식을 사용하는 것보다 속도가 느리지는 않습니까? simplexml로 xhtml 구문 분석 예제를 어디에서 찾을 수 있습니까? – Alex
@Alex, 아마도 좋지만. - @Blender, .. 그리고 페이지가 유효한 XML이되도록기도하십시오. – halfdan
정규 표현식으로 이런 일을하는 것은 기본적으로 불가능하기 때문에 Regex는 귀에서 뇌를 폭발시킵니다. 정규식을 사용하여 * 이메일 주소의 유효성을 검사하는 데 필요한 복잡성 수준을 확인하려면 다음을 참조하십시오. http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html – Blender
그것은 수도 jQuery를 사용하여 클라이언트 측에서이 같은 일을하는 것이 더 쉬울 수 : 크레이그 화이트로
<script type="text/javascript">
$(document).ready(function()
{
$.each($('a'), function(idx, tag)
{
// you might make this smarter and throw out URLS like
// http://www.otherdomain.com/yourdomain.com
if ($(tag).attr('href').indexOf('yourdomain.com') < 0)
{
$(tag).attr('rel', 'external');
}
});
});
</script>
그래도 지적이 아무것도 SEO하지 않습니다 JavaScript를 사용하지 않는 사용자에게는 도움이되지 않습니다.
좋은 생각. Google이나 JS가 사용 중지 된 사용자에게는 적합하지 않습니다. –
참. 나는 그것을 반영하기 위해 나의 대답을 업데이트했다. –
매우 깨끗하고 정확하며 효율적인 솔루션. +1 – ridgerunner
+1 실제로 OP가 원하는 것을하고 있습니다. – Blender