在 html/PHP 中使用 javascript 更改变音符号颜色
Change diacritics color with javascript in html/PHP
我正在使用以下脚本从文本中删除变音符号,我想知道是否有办法为 html 或 PHP 中的变音符号着色而不是删除它们(示例是阿拉伯语,但同样适用于希伯来语、法语,甚至英语..等)。
Javascript代码:
$(document).ready(function(){
var bodyText = $('#page_content').html();
function replaceChars()
{
newBodyText = bodyText.replace(/َ/gi,'');
newBodytext = newBodyText.replace(/ً/gi,'');
newBodyText = newBodyText.replace(/ُ/gi,'');
newBodyText = newBodyText.replace(/ٌ/gi,'');
newBodyText = newBodyText.replace(/`/gi,'');
newBodyText = newBodyText.replace(/ِ/gi,'');
newBodyText = newBodyText.replace(/ٍ/gi,'');
newBodyText = newBodyText.replace(/،/gi,'');
newBodyText = newBodyText.replace(/ْ/gi,'');
newBodyText = newBodyText.replace(/ّ/gi,'');
}
$('.testMe').toggle(function() {
replaceChars();
$('#page_content').html(newBodyText);
$('#actionDiacritics').html('Show');
}, function() {
$('#page_content').html(bodyText);
$('#actionDiacritics').html('Hide');
});
});
运行 演示:http://jsfiddle.net/8jAL8/29/
输入: لاَ توتوعووّبُواٌ مِنْ هذَا:
所需输出示例:
在 Microsoft Word 或 LibreOffice 中有一个选项可以做到这一点,我也找到了 something here 但第一个答案需要一个固定的文本才能工作,第二个答案只是将整个上半部分着色正文。
我的回答很粗暴,如果你说你不想使用"fixed text"你的意思是绝对位置的文本(我假设你的意思是"fixed text" 在某种意义上你不能动态输入一些文本)。
综上所述,您可以做的一件事就是将相同的文本置于红色后面(使用 z-index)。当你想看到红色的变音符号时,你可以像现在一样把前面文字的变音符号去掉。
HTML
<a class="testMe" id="actionDiacritics" style="cursor: pointer;">Highlight</a>
<br /><br />
<span style="font-size: 30pt">
<div id="page_content">
<span id="highlighted_diacritics">
لاَ تَتَعَجَّبُوا مِنْ هذَا
</span>
<span id="unhighlighted_diacritics">
لاَ تَتَعَجَّبُوا مِنْ هذَا
</span>
</div></span>
CSS
#highlighted_diacritics {
position: absolute;
z-index:-1;
color: red;
}
JS
$(document).ready(function(){
var bodyText = $('#unhighlighted_diacritics').html();
function replaceChars()
{
newBodyText = bodyText.replace(/َ/gi,'');
newBodytext = newBodyText.replace(/ً/gi,'');
newBodyText = newBodyText.replace(/ُ/gi,'');
newBodyText = newBodyText.replace(/ٌ/gi,'');
newBodyText = newBodyText.replace(/`/gi,'');
newBodyText = newBodyText.replace(/ِ/gi,'');
newBodyText = newBodyText.replace(/ٍ/gi,'');
newBodyText = newBodyText.replace(/،/gi,'');
newBodyText = newBodyText.replace(/ْ/gi,'');
newBodyText = newBodyText.replace(/ّ/gi,'');
}
$('.testMe').toggle(function() {
replaceChars();
$('#unhighlighted_diacritics').html(newBodyText);
$('#actionDiacritics').html('Un-highlight');
}, function() {
$('#unhighlighted_diacritics').html(bodyText);
$('#actionDiacritics').html('Highlight');
});
});
这是早期的 fiddle:https://jsfiddle.net/8mfgmovj/
您可能会注意到,红色文本在黑色文本周围形成了一条线,不幸的是,在调整 window 大小后,红色文本可能最终出现在错误的位置。
如果您在 <span>
元素中包含变音符号,并将样式设置为您想要的颜色,并在变音符号之前放置一个零宽度 space 字符 (unicode ), 它应该工作。似乎 span 元素不能改变变音符号的颜色,但如果有其他字符先出现,它会。
例如:
<div>
א<span id = "colored1" style="color:red">​ָ</span>
</div>
这在 Chrome、Opera 和 Edge 中对我有用。在 Firefox 中,零宽度-space 移动了变音符号(对于零宽度来说太多了)但是如果你完全删除它,它可以正常工作。
首先,要从阿拉伯语文本中删除 8 个阿拉伯语 tashkeel,您可以使用以下短行:
const removeTashkel = s => s.replace(/[\u064B-\u0652]/gm,'');
然后您可以像这样使用函数:
console.log(removeTashkel("بِسْمِ اللهِ الرَّحْمنِ الرَّحِيْمِ"));
对于你问题的第二部分,这里有一个简短的函数来为阿拉伯语变音符号(tashkeel 符号“harakat”)着色。
有八 (8) 个基本的阿拉伯语塔什干符号,即:
U+064B ً Tanwīn Fatiḥ تنوين بالفتح
U+064C ٌ Tanwīn Ḍamm تنوين بالضم
U+064D ٍ Tanwīn Kasr تنوين بالكسر
U+064E َ Fatḥah الفتحة
U+064F ُ Ḍammah الضمة
U+0650 ِ Kasrah الكسرة
U+0651 ّ Shaddah الشدة
U+0652 ْ Sukūn السكون
要让每个 tashkeel 符号(变音符号)都有自己的颜色,请使用您的阿拉伯语文本调用该函数,如下所示:
let my colouredText = colorizeTashkeel("لاَ تَتَعَجَّبُواٌ مِنْ هذَا");
// then insert it in your html <div> with:
document.getElementById("your_Div_id").innerHTML = colouredText ;
如果您希望所有 tashkeel 符号(变音符号)具有 相同的 颜色,则将 html 颜色名称作为第二个参数传递给函数,如下所示:
let my colouredText = colorizeTashkeel("لاَ تَتَعَجَّبُواٌ مِنْ هذَا", "red");
// then insert it in your html <div> with:
document.getElementById("your_Div_id").innerHTML = colouredText ;
这是带有工作示例的函数。
您可以在函数的第 2 行更改用于 8 个变音符号的八 (8) 个颜色名称。
在下面的三 (3) 个示例中;第一个是不同颜色的,第二个是蓝色的,第三个是红色的。
// example
let myText = colorizeTashkeel("بِسْمِ اللهِ الرَّحْمٰنِ الرَّحِيْمِ") +'<br><br>'+
colorizeTashkeel("لاَ تَتَعَجَّبُواٌ مِنْ هذَا","blue") +'<br><br>'+
colorizeTashkeel("ثَلَاثُمِائَةٍ وَأرْبَعَةٌ وَثَلَاثُونَ","red");
document.getElementById("myText").innerHTML = myText;
//=========================================================
function colorizeTashkeel(string, oneColor="") {
let result="",colorTable = ['red','blue','green','DarkOrange','aqua','magenta','BlueViolet','Brown']; // 8 colors for 8 tashkeel vowels
[...string].forEach(char => result += (/[\u064B-\u0652]/.test(char)) ? '<span style="color:' + (oneColor ? oneColor : colorTable[char.charCodeAt() - 1611]) + '">​' + char + '</span>' : char);
return result;
};
//=========================================================
<div id="myText" style="font-size: 40px; font-weight: bold;">
我正在使用以下脚本从文本中删除变音符号,我想知道是否有办法为 html 或 PHP 中的变音符号着色而不是删除它们(示例是阿拉伯语,但同样适用于希伯来语、法语,甚至英语..等)。
Javascript代码:
$(document).ready(function(){
var bodyText = $('#page_content').html();
function replaceChars()
{
newBodyText = bodyText.replace(/َ/gi,'');
newBodytext = newBodyText.replace(/ً/gi,'');
newBodyText = newBodyText.replace(/ُ/gi,'');
newBodyText = newBodyText.replace(/ٌ/gi,'');
newBodyText = newBodyText.replace(/`/gi,'');
newBodyText = newBodyText.replace(/ِ/gi,'');
newBodyText = newBodyText.replace(/ٍ/gi,'');
newBodyText = newBodyText.replace(/،/gi,'');
newBodyText = newBodyText.replace(/ْ/gi,'');
newBodyText = newBodyText.replace(/ّ/gi,'');
}
$('.testMe').toggle(function() {
replaceChars();
$('#page_content').html(newBodyText);
$('#actionDiacritics').html('Show');
}, function() {
$('#page_content').html(bodyText);
$('#actionDiacritics').html('Hide');
});
});
运行 演示:http://jsfiddle.net/8jAL8/29/
输入: لاَ توتوعووّبُواٌ مِنْ هذَا:
所需输出示例:
在 Microsoft Word 或 LibreOffice 中有一个选项可以做到这一点,我也找到了 something here 但第一个答案需要一个固定的文本才能工作,第二个答案只是将整个上半部分着色正文。
我的回答很粗暴,如果你说你不想使用"fixed text"你的意思是绝对位置的文本(我假设你的意思是"fixed text" 在某种意义上你不能动态输入一些文本)。
综上所述,您可以做的一件事就是将相同的文本置于红色后面(使用 z-index)。当你想看到红色的变音符号时,你可以像现在一样把前面文字的变音符号去掉。
HTML
<a class="testMe" id="actionDiacritics" style="cursor: pointer;">Highlight</a>
<br /><br />
<span style="font-size: 30pt">
<div id="page_content">
<span id="highlighted_diacritics">
لاَ تَتَعَجَّبُوا مِنْ هذَا
</span>
<span id="unhighlighted_diacritics">
لاَ تَتَعَجَّبُوا مِنْ هذَا
</span>
</div></span>
CSS
#highlighted_diacritics {
position: absolute;
z-index:-1;
color: red;
}
JS
$(document).ready(function(){
var bodyText = $('#unhighlighted_diacritics').html();
function replaceChars()
{
newBodyText = bodyText.replace(/َ/gi,'');
newBodytext = newBodyText.replace(/ً/gi,'');
newBodyText = newBodyText.replace(/ُ/gi,'');
newBodyText = newBodyText.replace(/ٌ/gi,'');
newBodyText = newBodyText.replace(/`/gi,'');
newBodyText = newBodyText.replace(/ِ/gi,'');
newBodyText = newBodyText.replace(/ٍ/gi,'');
newBodyText = newBodyText.replace(/،/gi,'');
newBodyText = newBodyText.replace(/ْ/gi,'');
newBodyText = newBodyText.replace(/ّ/gi,'');
}
$('.testMe').toggle(function() {
replaceChars();
$('#unhighlighted_diacritics').html(newBodyText);
$('#actionDiacritics').html('Un-highlight');
}, function() {
$('#unhighlighted_diacritics').html(bodyText);
$('#actionDiacritics').html('Highlight');
});
});
这是早期的 fiddle:https://jsfiddle.net/8mfgmovj/
您可能会注意到,红色文本在黑色文本周围形成了一条线,不幸的是,在调整 window 大小后,红色文本可能最终出现在错误的位置。
如果您在 <span>
元素中包含变音符号,并将样式设置为您想要的颜色,并在变音符号之前放置一个零宽度 space 字符 (unicode ), 它应该工作。似乎 span 元素不能改变变音符号的颜色,但如果有其他字符先出现,它会。
例如:
<div>
א<span id = "colored1" style="color:red">​ָ</span>
</div>
这在 Chrome、Opera 和 Edge 中对我有用。在 Firefox 中,零宽度-space 移动了变音符号(对于零宽度来说太多了)但是如果你完全删除它,它可以正常工作。
首先,要从阿拉伯语文本中删除 8 个阿拉伯语 tashkeel,您可以使用以下短行:
const removeTashkel = s => s.replace(/[\u064B-\u0652]/gm,'');
然后您可以像这样使用函数:
console.log(removeTashkel("بِسْمِ اللهِ الرَّحْمنِ الرَّحِيْمِ"));
对于你问题的第二部分,这里有一个简短的函数来为阿拉伯语变音符号(tashkeel 符号“harakat”)着色。
有八 (8) 个基本的阿拉伯语塔什干符号,即:
U+064B ً Tanwīn Fatiḥ تنوين بالفتح
U+064C ٌ Tanwīn Ḍamm تنوين بالضم
U+064D ٍ Tanwīn Kasr تنوين بالكسر
U+064E َ Fatḥah الفتحة
U+064F ُ Ḍammah الضمة
U+0650 ِ Kasrah الكسرة
U+0651 ّ Shaddah الشدة
U+0652 ْ Sukūn السكون
要让每个 tashkeel 符号(变音符号)都有自己的颜色,请使用您的阿拉伯语文本调用该函数,如下所示:
let my colouredText = colorizeTashkeel("لاَ تَتَعَجَّبُواٌ مِنْ هذَا");
// then insert it in your html <div> with:
document.getElementById("your_Div_id").innerHTML = colouredText ;
如果您希望所有 tashkeel 符号(变音符号)具有 相同的 颜色,则将 html 颜色名称作为第二个参数传递给函数,如下所示:
let my colouredText = colorizeTashkeel("لاَ تَتَعَجَّبُواٌ مِنْ هذَا", "red");
// then insert it in your html <div> with:
document.getElementById("your_Div_id").innerHTML = colouredText ;
这是带有工作示例的函数。
您可以在函数的第 2 行更改用于 8 个变音符号的八 (8) 个颜色名称。
在下面的三 (3) 个示例中;第一个是不同颜色的,第二个是蓝色的,第三个是红色的。
// example
let myText = colorizeTashkeel("بِسْمِ اللهِ الرَّحْمٰنِ الرَّحِيْمِ") +'<br><br>'+
colorizeTashkeel("لاَ تَتَعَجَّبُواٌ مِنْ هذَا","blue") +'<br><br>'+
colorizeTashkeel("ثَلَاثُمِائَةٍ وَأرْبَعَةٌ وَثَلَاثُونَ","red");
document.getElementById("myText").innerHTML = myText;
//=========================================================
function colorizeTashkeel(string, oneColor="") {
let result="",colorTable = ['red','blue','green','DarkOrange','aqua','magenta','BlueViolet','Brown']; // 8 colors for 8 tashkeel vowels
[...string].forEach(char => result += (/[\u064B-\u0652]/.test(char)) ? '<span style="color:' + (oneColor ? oneColor : colorTable[char.charCodeAt() - 1611]) + '">​' + char + '</span>' : char);
return result;
};
//=========================================================
<div id="myText" style="font-size: 40px; font-weight: bold;">