小编典典

在文字换行的阿拉伯区域中找到“换行符”

javascript

我有一个在文本区域(从右到左方向)显示的文本字符串。用户可以动态调整textarea的大小(为此我使用jquery),并且文本将根据需要自动换行。

当用户点击“提交”时,我将使用该文本并使用PHP,BUT创建图像,然后再提交,我想知道“换行符”或“自动换行”发生的位置。

到目前为止,我所看到的所有地方仅向我展示了如何在php端处理换行符。我想明确地说,没有线路中断。我所拥有的是一个长字符串,它将根据用户设置的文本区域的宽度以不同的方式进行换行。

我不能使用“列”或任何其他标准宽度表示形式,因为我有一个非常复杂的阿拉伯字体,实际上是由许多不同宽度的字形(字符)组成的。

如果有人知道访问自动换行的方式(如果需要,可以在文本区域或div中),我真的很想知道。

我唯一的其他解决方案是实际存储每个字符的宽度(在我的数据库中)(这有点乏味,因为有600种不同的字体中有200多个字符,总共……有些庞大)。

我的希望不高,但我想我会问。

谢谢


阅读 403

收藏
2020-05-01

共1个答案

小编典典

好吧,除了 找到 换行符(这几乎是不可能的)之外,您可以使用以下功能将其 强制 进入文本区域:

function ApplyLineBreaks(strTextAreaId) {
    var oTextarea = document.getElementById(strTextAreaId);
    if (oTextarea.wrap) {
        oTextarea.setAttribute("wrap", "off");
    }
    else {
        oTextarea.setAttribute("wrap", "off");
        var newArea = oTextarea.cloneNode(true);
        newArea.value = oTextarea.value;
        oTextarea.parentNode.replaceChild(newArea, oTextarea);
        oTextarea = newArea;
    }

    var strRawValue = oTextarea.value;
    oTextarea.value = "";
    var nEmptyWidth = oTextarea.scrollWidth;
    var nLastWrappingIndex = -1;
    for (var i = 0; i < strRawValue.length; i++) {
        var curChar = strRawValue.charAt(i);
        if (curChar == ' ' || curChar == '-' || curChar == '+')
            nLastWrappingIndex = i;
        oTextarea.value += curChar;
        if (oTextarea.scrollWidth > nEmptyWidth) {
            var buffer = "";
            if (nLastWrappingIndex >= 0) {
                for (var j = nLastWrappingIndex + 1; j < i; j++)
                    buffer += strRawValue.charAt(j);
                nLastWrappingIndex = -1;
            }
            buffer += curChar;
            oTextarea.value = oTextarea.value.substr(0, oTextarea.value.length - buffer.length);
            oTextarea.value += "\n" + buffer;
        }
    }
    oTextarea.setAttribute("wrap", "");
}

此函数获取textarea的ID,每当有自动换行时,它将换行符压入textarea。在表单提交中运行该函数,您将在服务器端代码中获得带有适当换行符的文本。

2020-05-01