Валидация HTML кода (phpFOX 3)

HTML код движка phpFOX не валиден, я решил докопаться до этого.
Валидность проверяем тут: https://validator.w3.org/.

На странице с лентой новостей несколько тегов с одинаковым идентификатором, что не правильно, на странице должны быть только уникальные id. Я решил заменить id на data-userinfo, делаем так:
<span class="user_profile_link_span" id="js_user_name_link_Slash"> 

Открываем файл: include/library/phpfox/template/cache.class.php, строку:
                        $sVariable = '\'<span class="user_profile_link_span" id="js_user_name_link_\' . ' . $sVariable . '[\'' . $sSuffix . 'user_name\'] . \'"' . ($bAuthor ? ' itemprop="author"' : '') . '><a href="\' . Phpfox::getLib(\'phpfox.url\')->makeUrl(\'profile\', array(' . $sVariable . '[\'' . $sSuffix . 'user_name\'], ((empty(' . $sVariable . '[\'' . $sSuffix . 'user_name\']) && isset(' . $sVariable . '[\'' . $sSuffix . 'profile_page_id\'])) ? ' . $sVariable . '[\'' . $sSuffix . 'profile_page_id\'] : null))) . \'"' . $sExtra . '>' . $sValue . '</a></span>\'';

Меняем на:
                        $sVariable = '\'<span class="user_profile_link_span" data-userinfo="\' . ' .  $sVariable . '[\'' . $sSuffix . 'user_name\'] . \'"' . ($bAuthor ? ' itemprop="author"' : '') . '><a href="\' . Phpfox::getLib(\'phpfox.url\')->makeUrl(\'profile\', array(' . $sVariable . '[\'' . $sSuffix . 'user_name\'], ((empty(' . $sVariable . '[\'' . $sSuffix . 'user_name\']) && isset(' . $sVariable . '[\'' . $sSuffix . 'profile_page_id\'])) ? ' . $sVariable . '[\'' . $sSuffix . 'profile_page_id\'] : null))) . \'"' . $sExtra . '>' . $sValue . '</a></span>\''; 

Затем открываем: static/jscript/user_info.js, находим:
        var $sUserName = $(this).parent().attr('id').replace('js_user_name_link_', ''); 

Меняем на:
        var $sUserName = $(this).parent().data('userinfo'); 

Находим:
        oCloseObject         = $(this).parent().attr('id').replace('js_user_name_link_', '');

Меняем на:
        oCloseObject         = $(this).parent().data('userinfo');

Далее открываем: module/feed/include/service/feed.class.php, находим:
                        $sUserLink = '<span class="user_profile_link_span" id="js_user_name_link_' . $aLike['user_name'] . '"><a href="' . $oUrl->makeUrl($aLike['user_name']) . '">'.$oParse->shorten($aLike['full_name'], 30) .'</a></span>';

Меняем на:
                        $sUserLink = '<span class="user_profile_link_span" data-userinfo="' . $aLike['user_name'] . '"><a href="' . $oUrl->makeUrl($aLike['user_name']) . '">'.$oParse->shorten($aLike['full_name'], 30) .'</a></span>';

Находим:
        return ($bAddSpan ? '<span class="user_profile_link_span" id="js_user_name_link_' . $sUserName . '">' : '') . '<a href="' . $sLink . '">' . $sStr . '</a>' . ($bAddSpan ? '</span>' : '');

Меняем на:
        return ($bAddSpan ? '<span class="user_profile_link_span" data-userinfo="' . $sUserName . '">' : '') . '<a href="' . $sLink . '">' . $sStr . '</a>' . ($bAddSpan ? '</span>' : '');

Открываем: module/feed/template/default/block/content.html.php, находим:
                        <span class="user_profile_link_span" id="js_user_name_link_{$aFeed.feed_title_sub|clean}"> 

Меняем на:
                        <span class="user_profile_link_span" data-userinfo="{$aFeed.feed_title_sub|clean}">

После внесенных изменений, чистим кэш сайта, возможно потребуется очистка кэша браузера.
Атрибут language="javascript" в теге script, считается устаревшим, а в движке этот атрибут мне попадался несколько раз.
Очищаем движок от "старья", открываем: include/library/twitter/tests/coverage/EpiCurl.php.html, находим:
    <script language="javascript">

Меняем на:
    <script type="text/javascript">

Открываем: include/library/twitter/tests/coverage/EpiOAuth.php.html, находим:
    <script language="javascript"> 

Меняем на:
    <script type="text/javascript"> 

Открываем: include/library/twitter/tests/coverage/EpiTwitter.php.html, находим:
    <script language="javascript"> 

Меняем на:
    <script type="text/javascript"> 

Открываем: include/library/twitter/tests/coverage/tests_AllTests.php.html, находим:
    <script language="javascript"> 

Меняем на:
    <script type="text/javascript"> 

Открываем: static/jscript/wysiwyg/tiny_mce/plugins/advimage/js/image.js, находим:
            document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

Меняем на:
            document.write('<script type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

Открываем: static/jscript/wysiwyg/tiny_mce/plugins/advlink/js/advlink.js, находим:
        document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); 

Меняем на:
        document.write('<script type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); 

Открываем: static/jscript/wysiwyg/tiny_mce/plugins/media/js/media.js, находим:
        document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); 

Меняем на:
        document.write('<script type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); 

Открываем: static/jscript/wysiwyg/tiny_mce/plugins/preview/example.html, находим:
<script language="javascript" src="../../tiny_mce_popup.js"></script>

Меняем на:
<script type="text/javascript" src="../../tiny_mce_popup.js"></script>

Открываем: static/jscript/wysiwyg/tiny_mce/plugins/template/js/template.js, находим:
            document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></sc'+'ript>');

Меняем на:
            document.write('<script type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

Открываем: static/jscript/wysiwyg/tiny_mce/themes/advanced/image.js, находим:
            document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

Меняем на:
            document.write('<script type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');

Открываем: static/jscript/wysiwyg/tiny_mce/themes/advanced/link.js, находим:
            document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); 

Меняем на:
            document.write('<script type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>'); 
В исходном коде при определенных условиях, выводится пустой тег <h1>, в добавок тег имеет атрибут для установки ширины (width), но без размера:
                <h1 style="width:;"></h1> 

Исправляем. Открываем: module/profile/template/default/block/header.html.php, находим:
                <h1 style="width:{if isset($aPage)}{else}400px{/if};">
                    {if isset($aUser.user_name)}
                        <a href="{if isset($aUser.link) && !empty($aUser.link)}{url link=$aUser.link}{else}{url link=$aUser.user_name}{/if}" title:"{$aUser.full_name|clean}">
                            {$aUser.full_name|clean|split:30|shorten:50:'...'}
                        </a>
                    {/if}                    
                    
                    {foreach from=$aBreadCrumbs key=sLink item=sCrumb name:link}{if $phpfox.iteration.link == 1}<span class="profile_breadcrumb">»</span><a href="{$sLink}">{$sCrumb}</a>{/if}{/foreach}
                </h1> 

И меняем на:
                {if isset($aUser.user_name)}
                <h1{if empty($aPage)} style="width: 400px;"{/if}>
                    <a href="{if isset($aUser.link) && !empty($aUser.link)}{url link=$aUser.link}{else}{url link=$aUser.user_name}{/if}" title:"{$aUser.full_name|clean}">
                        {$aUser.full_name|clean|split:30|shorten:50:'...'}
                    </a>
                </h1>
                {/if}                    
                    
                {foreach from=$aBreadCrumbs key=sLink item=sCrumb name:link}
                    {if $phpfox.iteration.link == 1}
                    <span class="profile_breadcrumb">»</span><a href="{$sLink}">{$sCrumb}</a>
                    {/if}
                {/foreach} 

В файле: module/user/template/default/block/register/step1.html.php, строку:
        <div><input type="hidden" name:"val[full_name]" id="full_name" value="stock" size:"30" /></div> 

Заменил на:
        <div><input type="hidden" name:"val[full_name]" id="full_name" value="stock" /></div> 

В файле: static/nodb.html, строку:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Заменил на:
<!DOCTYPE html>

В этом же файле, удалил строки:
        <meta http-equiv="imagetoolbar" content="no" />
        <meta http-equiv="cache-control" content="no-cache" />
        <meta http-equiv="expires" content="-1" />
        <meta http-equiv="pragma" content="no-cache" />

В файле: include/library/phpfox/phpfox/phpfox.class.php, удалил строки:
                    '<meta http-equiv="cache-control" content="no-cache" />',
                    '<meta http-equiv="expires" content="-1" />',
                    '<meta http-equiv="pragma" content="no-cache" />',
В движке используются ссылки на "текущею страницу" с атрибутом name, что является устаревшим для атрибута ссылки и при проверки валидатором исходного кода можно получить ошибку:
The "name" attribute is obsolete. Consider putting an "id" attribute on the nearest container instead

Через поиск по всем файлам нашел ссылки с устаревшим атрибутом и заменил name на id. После получил такую ошибку:
Duplicate ID xxxxx

Покопавшись в коде, нашел лишние куски и повыкидывал их. Например, в файле: "module/forum/template/default/block/post.html.php", этот кусок кода:
{if empty($bIsPostUpdateText)}
<div id="post{$aPost.post_id}">
{/if}
	<div class="js_post_count"><a id="post{$aPost.post_id}"></a></div>

Заменил на:
<div id="post{$aPost.post_id}" class="js_post_count">

Еще Валидатор меня предупреждает:
The type attribute is unnecessary for JavaScript resources

Это говорит о том, что у всех тегов <script> атрибут type больше не нужен и его следует удалить.

С атрибутом rel, как и с многим другим, в phpFox полный бардак, надо разбираться.