Maison php教程 PHP源码 [原创]HTML Diff,php版本,文本对比(标记出两个HTML的差异)

[原创]HTML Diff,php版本,文本对比(标记出两个HTML的差异)

May 25, 2016 pm 05:11 PM

                  

           

3. [代码][JavaScript]代码     跳至                                       

/*
 * Compare str
 * @example var result = htmldiff.compare('str1','str2');
 * 
 * 
 */
var htmldiff = {
	MODE_CHARACTER: 1,MODE_TAG: 2,MODE_WHITESPACE: 3,
	ACTION_EQUAL: 1,ACTION_DELETE: 2,ACTION_INSERT: 3,ACTION_NONE: 4,ACTION_REPLACE: 5,
	specialCaseOpeningTags: new Array('\\s]+', '\\s]+', '\\s]+', '\\s]+', '\\s]+', '\\s]+', '\\s]+', '\\s]+', '\\s]+', '\\s]+'),
	specialCaseClosingTags: new Array('', '', '', '', '', '', '', '', '', ''),
	content: '',
	wordIndices: '',
	oldWords: '',newWords: '',
	compare: function(str1, str2) {
		this.content = new Array();
		this.wordIndices = new Array();
		this.oldWords = this.ConvertHtmlToListOfWords(str1);
		this.newWords = this.ConvertHtmlToListOfWords(str2);
		this.wordIndices = this.IndexNewWords(this.newWords);
		var b = this.Operations();
		for (var c = 0; c < b.length; c++) {
			var d = b[c];
			this.PerformOperation(d);
		}
		return this.content.join(&#39;&#39;);
	},
	Operations: function() {
		var d = 0;
		var j = 0;
		var a = new Array();
		var f = this.MatchingBlocks();
		f.push(this.Match(this.oldWords.length, this.newWords.length, 0));
		for (var i = 0; i < f.length; i++) {
			var g = f[i];
			var b = (d == g.StartInOld);
			var h = (j == g.StartInNew);
			var c = this.ACTION_NONE;
			if (b == false && h == false)
				c = this.ACTION_REPLACE;
			else {
				if (b == true && h == false)
					c = this.ACTION_INSERT;
				else {
					if (b == false && h == true)
						c = this.ACTION_DELETE;
					else
						c = this.ACTION_NONE;
				}
			}
			if (c != this.ACTION_NONE)
				a.push(this.Operation(c, d, g.StartInOld, j, g.StartInNew));
			if (g.length != 0)
				a.push(this.Operation(this.ACTION_EQUAL, g.StartInOld, g.EndInOld(), g.StartInNew, g.EndInNew()));
			d = g.EndInOld();
			j = g.EndInNew();
		}
		return a;
	},
	MatchingBlocks: function() {
		var a = new Array();
		this.FindMatchingBlocks(0, this.oldWords.length, 0, this.newWords.length, a);
		return a;
	},
	FindMatchingBlocks: function(c, b, f, e, d) {
		var a = this.FindMatch(c, b, f, e);
		if (a != null) {
			if (c < a.StartInOld && f < a.StartInNew)
				this.FindMatchingBlocks(c, a.StartInOld, f, a.StartInNew, d);
			d.push(a);
			if (a.EndInOld() < b && a.EndInNew() < e)
				this.FindMatchingBlocks(a.EndInOld(), b, a.EndInNew(), e, d);
		}
	},
	FindMatch: function(l, e, b, k) {
		var f = l;
		var m = b;
		var n = 0;
		var c = new Array();
		for (var i = l; i < e; i++) {
			var d = new Array();
			var h = this.oldWords[i];
			if (!this.wordIndices[h]) {
				c = d;
				continue;
			}
			for (var g = 0; g < this.wordIndices[h].length; g++) {
				var a = this.wordIndices[h][g];
				if (a < b) continue;
				if (a >= k) break;

				newMatchLength = (c[a - 1] ? c[a - 1] : 0) + 1;
				d[a] = newMatchLength;
				if (newMatchLength > n) {
					f = i - newMatchLength + 1;
					m = a - newMatchLength + 1;
					n = newMatchLength;
				}
			}
			c = d;
		}
		return n != 0 ? this.Match(f, m, n) : null;
	},
	IndexNewWords: function(d) {
		var b = new Array();
		for (var i = 0; i < d.length; i++) {
			var c = d[i];
			if (b[c])
				b[c].push(i);
			else
				b[c] = [i];
		}
		return b;
	},
	ConvertHtmlToListOfWords: function(b) {
		var f = this.MODE_CHARACTER;
		var e = &#39;&#39;;
		var d = new Array();
		for (var i = 0; i < b.length; i++) {
			var c = b[i];
			switch (f) {
			case this.MODE_CHARACTER:
				if (this.IsStartOfTag(c)) {
					if (e)
						d.push(e);
					e = &#39;<&#39;;
					f = this.MODE_TAG;
				} else {
					if (this.IsWhiteSpace(c)) {
						if (e)
							d.push(e);
						e = c;
						f = this.MODE_WHITESPACE;
					} else {console.log(e );
						if (this.isNaW(e + c)) {
							if (e)
								d.push(e);
							e = c;
						} else
							e = e + c;
					}
				}
				break;
			case this.MODE_TAG:
				if (this.IsEndOfTag(c)) {
					e = e + &#39;>&#39;;
					d.push(e);
					e = &#39;&#39;;
					if (this.IsWhiteSpace(c))
						f = this.MODE_WHITESPACE;
					else
						f = this.MODE_CHARACTER;
				} else
					e = e + c;
				break;
			case this.MODE_WHITESPACE:
				if (this.IsStartOfTag(c)) {
					if (e)
						d.push(e);
					e = &#39;<&#39;;
					f = this.MODE_TAG;
				} else {
					if (this.IsWhiteSpace(c))
						e = e + c;
					else {
						if (e)
							d.push(e);
						e = c;
						f = this.MODE_CHARACTER;
					}
				}
				break;
			default:
				break;
			}
		}
		if (e)
			d.push(e);
		return d;
	},
	PerformOperation: function(a) {
		switch (a.Action) {
		case this.ACTION_EQUAL:
			this.ProcessEqualOperation(a);
			break;
		case this.ACTION_DELETE:
			this.ProcessDeleteOperation(a, &#39;diffdel&#39;);
			break;
		case this.ACTION_INSERT:
			this.ProcessInsertOperation(a, &#39;diffins&#39;);
			break;
		case this.ACTION_NONE:
			break;
		case this.ACTION_REPLACE:
			this.ProcessReplaceOperation(a);
			break;
		default:
			break;
		}
	},
	ProcessReplaceOperation: function(a) {
		this.ProcessDeleteOperation(a, &#39;diffmod&#39;);
		this.ProcessInsertOperation(a, &#39;diffmod&#39;);
	},
	ProcessInsertOperation: function(b, a) {
		var c = this.array_slice(this.newWords, b.StartInNew, b.EndInNew);
		this.InsertTag(&#39;ins&#39;, a, c);
	},
	ProcessDeleteOperation: function(b, a) {
		var c = this.array_slice(this.oldWords, b.StartInOld, b.EndInOld);
		this.InsertTag(&#39;del&#39;, a, c);
	},
	ProcessEqualOperation: function(b) {
		var a = this.array_slice(this.newWords, b.StartInNew, b.EndInNew);
		this.content.push(a.join(&#39;&#39;));
	},
	preg_match_array: function(b, e) {
		var a = 0;
		for (var i = 0; i < b.length; i++)
			a |= (new RegExp(b[i])).test(e);
		return a;
	},
	InsertTag: function(j, h, f) {
		while (true) {
			if (f.length == 0) break;

			var b = this.ExtractConsecutiveWords(f, false);
			var c = b.items;
			f = b.words;
			var a = &#39;&#39;;
			var e = false;
			if (c.length != 0) {
				var g = this.WrapText(c.join(&#39;&#39;), j, h);
				this.content.push(g);
			} else {
				if ( !! this.preg_match_array(this.specialCaseOpeningTags, f[0])) {
					a = &#39;&#39;;
					if (j == &#39;del&#39;)
						f.shift();
				} else {
					if (this.in_array(f[0], this.specialCaseClosingTags)) {
						a = &#39;&#39;;
						e = true;
						if (j == &#39;del&#39;)
							f.shift();
					}
				}
			}
			if (f.length == 0 && a.length == 0) break;
			if (e) {
				var d = this.ExtractConsecutiveWords(f, true);
				f = d.words;
				this.content.push(a + d.items.join(&#39;&#39;));
			} else {
				var d = this.ExtractConsecutiveWords(f, true);
				f = d.words;
				this.content.push(d.items.join(&#39;&#39;) + a);
			}
		}
	},
	in_array: function(b, c) {
		for (var i = 0; i < c.length; i++) {
			if (c[i] == b)
				return true;
		}
		return false;
	},
	WrapText: function(c, b, a) {
		return &#39;<&#39; + b + &#39; class="&#39; + a + &#39;">&#39; + c + &#39;&#39;;
	},
	ExtractConsecutiveWords: function(d, f) {
		var e = false;
		for (var b = 0; b < d.length; b++) {
			var c = d[b];
			if (f ? !this.IsTag(c) : !!this.IsTag(c)) {
				e = b;
				break;
			}
		}
		if (e !== false) {
			var a = this.array_slice(d, 0, e);
			if (e > 0)
				d.splice(0, e);
			return {items: a,words: d};
		} else {
			a = d;
			d = new Array();
			return {items: a,words: d};
		}
	},
	IsTag: function(b) {
		var a = this.IsOpeningTag(b) || this.IsClosingTag(b);
		return a;
	},
	IsOpeningTag: function(a) {
		return /^\s*]+>\s*$/.test(a);
	},
	IsClosingTag: function(a) {
		return /^\s*]+>\s*$/.test(a);
	},
	IsStartOfTag: function(a) {
		return a == "<";
	},
	IsEndOfTag: function(a) {
		return a == ">";
	},
	IsWhiteSpace: function(a) {
		return /\s/.test(a);
	},
	isNaW: function(b) {
		return /[^\x00-\x80]/.test(b);
	},
	array_slice: function(a, b, c, d) {
		return a.slice(b, c);
	},
	Match: function(b, d, a) {
		var c = {
			StartInOld: b,
			StartInNew: d,
			Size: a
		};
		c.EndInOld = function() {
			return b + a;
		};
		c.EndInNew = function() {
			return d + a;
		};
		return c;
	},
	Operation: function(c, b, a, f, d) {
		var e = {
			Action: c,
			StartInOld: b,
			EndInOld: a,
			StartInNew: f,
			EndInNew: d
		};
		return e;
	}
};
Copier après la connexion

           

       

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Historique de développement de la version PHP (1995-2022) Historique de développement de la version PHP (1995-2022) Jun 01, 2020 pm 01:59 PM

En tant qu'apprenant et développeur PHP, comment puis-je ne pas comprendre son histoire ? Le site Web chinois PHP suivant amènera les passionnés de PHP à passer en revue les différentes versions historiques de PHP.

Tutoriel Pagoda Panel : Un guide simple pour changer de version PHP Tutoriel Pagoda Panel : Un guide simple pour changer de version PHP Mar 05, 2024 am 09:27 AM

Pagoda Panel est un panneau de gestion de serveur puissant et facile à utiliser qui peut aider les utilisateurs à gérer facilement les sites Web, les bases de données, FTP et autres services. Lors de l'utilisation du Pagoda Panel, vous devez parfois changer de version PHP pour l'adapter aux différents besoins du site Web. Cet article vous fournira un guide simple pour le changement de version PHP et fournira des exemples de code spécifiques pour aider les lecteurs à terminer rapidement l'opération de changement de version PHP. Tout d’abord, nous devons nous connecter au panneau Pagoda et accéder à la page des paramètres du site Web. Recherchez l'option "Site Web" dans la barre de navigation de gauche et cliquez sur

Guide d'utilisation du panneau Pagoda : partage des conseils de changement de version de PHP Guide d'utilisation du panneau Pagoda : partage des conseils de changement de version de PHP Mar 04, 2024 am 10:42 AM

BTPanel est un panneau de gestion de serveur puissant et facile à utiliser qui peut aider les utilisateurs à gérer facilement les serveurs, sites Web, bases de données et autres services. En tant que développeur ou administrateur de site Web, il est très important de maîtriser les compétences nécessaires pour changer de version de PHP dans le panneau Pagoda. Dans cet article, nous partagerons comment utiliser et changer de version de PHP dans le panneau Pagoda, et fournirons des exemples de code spécifiques pour aider les lecteurs à mieux maîtriser cette compétence. 1. Connectez-vous au panneau Pagoda. Tout d'abord, entrez l'adresse IP du serveur ou le nom de domaine dans le navigateur et ajoutez la pagode.

Comment gérer les erreurs causées par la mise à niveau de la version PHP Comment gérer les erreurs causées par la mise à niveau de la version PHP May 11, 2023 am 08:48 AM

Lors du développement d'un site Web ou d'une application utilisant PHP, les mises à niveau de version sont une tâche nécessaire car chaque version apporte de nouvelles fonctionnalités et corrige des problèmes connus. Cependant, les mises à niveau de version PHP peuvent également introduire de nouveaux bugs car la nouvelle version peut ne plus prendre en charge les fonctionnalités ou la syntaxe de l'ancienne version. Dans cet article, nous expliquerons comment gérer les erreurs causées par la mise à niveau de la version PHP pour garantir le fonctionnement normal de l'application. 1. Sauvegardez l'application et le serveur. Avant de mettre à niveau la version PHP, vous devez sauvegarder l'application et le serveur. L'application de sauvegarde peut être

Comprendre le sens et l'importance de PHP version NTS Comprendre le sens et l'importance de PHP version NTS Mar 27, 2024 pm 12:15 PM

La signification et l'importance de la version PHP NTS PHP (Hypertext Preprocessor) est un langage de script open source côté serveur largement utilisé pour développer des pages Web dynamiques. Les versions PHP incluent NTS (Non-ThreadSafe) et TS (ThreadSafe). Dans cet article, nous nous concentrerons sur la signification et l'importance des versions NTS et fournirons quelques exemples de code concrets. La version NTS fait référence à la version non thread-safe de PHP, conçue à l'origine pour

Comment mettre à jour la version PHP dans Eclipse Comment mettre à jour la version PHP dans Eclipse Mar 28, 2024 pm 09:54 PM

Eclipse est un environnement de développement intégré (IDE) largement utilisé qui peut être utilisé pour développer des projets dans divers langages de programmation. Lorsqu'on utilise Eclipse pour développer des projets PHP, il est parfois nécessaire de mettre à jour la version PHP pour s'adapter aux nouvelles fonctionnalités ou corriger des bugs. Cet article expliquera comment mettre à jour la version PHP dans Eclipse et fournira des exemples de code spécifiques. 1. Préparatifs pour la mise à jour de la version PHP Avant de mettre à jour la version PHP, nous devons nous assurer qu'Eclipse et l'environnement de développement PHP ont été installés. en outre,

Nouvelles fonctionnalités de la version PHP7 et leur impact sur le développement de mini-programmes Nouvelles fonctionnalités de la version PHP7 et leur impact sur le développement de mini-programmes Jul 04, 2023 pm 06:15 PM

Nouvelles fonctionnalités de la version PHP7 et leur impact sur le développement de mini-programmes Avec le développement continu de la technologie, l'industrie Internet évolue également chaque jour. Ces dernières années, les mini-programmes sont devenus un sujet brûlant dans le développement d’applications mobiles. Dans le même temps, la sortie de la version PHP7 est également devenue le centre d'attention des développeurs. Cet article explorera les nouveautés de la version PHP7 et analysera son impact sur le développement de petits programmes. 1. Nouvelles fonctionnalités de la version PHP7 Mise à jour majeure du langage PHP, la version PHP7 apporte de nombreuses nouvelles fonctionnalités et améliorations de performances. Voici quelques nouveautés importantes : Sexe

Comment les mises à jour de version des fonctions PHP affectent-elles le développement ? Comment les mises à jour de version des fonctions PHP affectent-elles le développement ? Apr 18, 2024 pm 02:54 PM

Impact des mises à jour de version des fonctions PHP : Impact des nouvelles fonctionnalités : De nouvelles fonctionnalités sont introduites pour faciliter le développement de tâches complexes. Corrigez l'impact du bug : améliorez le comportement des fonctions et améliorez la stabilité du code. Impact du changement de comportement : le plus perturbateur, nécessitant des mises à jour du code qui utilise la fonction. Bonnes pratiques : testez les mises à jour dans un environnement de test, vérifiez le code interactif et mettez à jour les dépendances concernées.

See all articles