我正在研究其他人的遗留代码,他们有一个奇怪的实现,他们做了以下事情:
- load javascript file into php
- perform a string replace for variables, such as replacing `$intro` with mysql data in the javascript
我的问题是$intro
数据包含carriage returns
,所以当我用mysql数据对javascript执行string replace
时,它会导致javascript中断。
以下是javascript中的代码行:
dialog.i_intro.value="$intro";
下面是php中的代码行:
$ln=str_replace("'$intro",$intro,$ln);
数据如下:
dialog.i_intro.value = "Hello World
Hello World
Hello World";
如何解决此问题?
更新我需要javascript 中的回车
我正在尝试以下操作:
在php:中
$intro = str_replace("'r'n","--carriage--",$intro);
在Javascript中:
dialog.i_intro.value=dialog.i_intro.value.replace('--carriage--',''r'n');
但有些东西不起作用。
扩展更新
我已经用html换行符替换了所有换行符。我发现代码正在使用eval
来解释js。这是我当前intro variable
的javascript输出。
dialog.i_intro.value="Hi Im Jonathan<br />
<br />
Hi Im Jonathan<br />
<br />
Hi Im Jonathan";
我下一步该怎么办?
可以使用正则表达式将'''n'或'''n''r'字符替换为'<br />'.
或空字符串''。
dialog.i_intro.value = i_intro.value.replace(/'n'r?/g, '<br />');
Javascript(至少目前在浏览器中部署了Javascript,在ES6中应该更容易)不能非常直观地处理字符串中的行结尾。你最好的选择是逃离回车,就像一样
dialog.i_intro.value = "Hello World '
Hello World '
Hello World";
这不应该触发错误,并且将保留所需的换行符。
要实现,请尝试以下操作,而不是当前的PHP字符串替换行:
$intro = str_replace("'n"," '''n",$intro);