我有一个在文本区域(从右到左方向)显示的文本字符串。用户可以动态调整textarea的大小(为此我使用jquery),并且文本将根据需要自动换行。
当用户点击“提交”时,我将使用该文本并使用PHP,BUT创建图像,然后再提交,我想知道“换行符”或“自动换行”发生的位置。
到目前为止,我所看到的所有地方仅向我展示了如何在php端处理换行符。我想明确地说,没有线路中断。我所拥有的是一个长字符串,它将根据用户设置的文本区域的宽度以不同的方式进行换行。
我不能使用“列”或任何其他标准宽度表示形式,因为我有一个非常复杂的阿拉伯字体,实际上是由许多不同宽度的字形(字符)组成的。
如果有人知道访问自动换行的方式(如果需要,可以在文本区域或div中),我真的很想知道。
我唯一的其他解决方案是实际存储每个字符的宽度(在我的数据库中)(这有点乏味,因为有600种不同的字体中有200多个字符,总共……有些庞大)。
我的希望不高,但我想我会问。
谢谢
好吧,除了 找到 换行符(这几乎是不可能的)之外,您可以使用以下功能将其 强制 进入文本区域:
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。在表单提交中运行该函数,您将在服务器端代码中获得带有适当换行符的文本。