【问题标题】:Dual \ when entering text inside text field在文本字段中输入文本时双 \
【发布时间】:2013-06-21 15:22:51
【问题描述】:

我有一个简单的文本字段,客户可以在其中输入他们的 html/php 代码。

在某些服务器上一切正常,但在某些服务器上,只要我输入:

\保存为\\

所以我想用这样的代码删除它,但它不起作用:

$text = str_replace('\','',$text);

有什么想法吗?

【问题讨论】:

  • 嗯。您需要开始寻找服务器之间的差异。您的代码、操作系统版本、PHP 版本等。显然导致不同行为的机器之间存在差异。不要试图用代码来修复它。这应该通过匹配机器的配置来解决。你是什​​么意思:It doesn't work?
  • 你打开了magic_quotes_gpc。这也暗示了一些旧版本的 PHP。对原因进行排序,而不是对结果进行排序。

标签: php string textfield str-replace


【解决方案1】:

您可能正在寻找:

$text = str_replace('\\\\','\\',$text);

这会将所有\\ 替换为\,或者:

$text = str_replace('\\','',$text);

这会将所有\ 替换为空。

您需要使用\\(和\\\\ 用于两个斜杠)的原因是为了转义\,因为'\' 本身正在转义结束引号,使您的字符串不完整。所以,你需要转义\,把它变成'\\'

服务器之间出现这种差异的原因可能是magic quotes,您可以通过确保两台服务器的此配置条目具有相同的值来防止出现上述代码。

而且,毕竟,正如N.B. 指出的那样,您只需调用stripslashes() 即可替换它,您将获得完全相同的结果。

【讨论】:

  • 也称为stripslashes()
  • @Spacedust:这很好,但不要将其作为您的最终解决方案。找到根本原因!
  • @N.B. - 是的,但我想使用原始代码向 OP 解释它。不过我会补充一点,谢谢。 (另外,不错的缩写;)
  • 如何用正确的字符替换单引号或双引号?我也有斜线。
  • @Spacedust - 我已经更新了我的答案。您可以使用代码的第二个版本,也可以使用 N.B.指出,stripslashes().
【解决方案2】:

您始终可以使用 ascii 代码:

 $text="\ it's saved as \\";
  $text = str_replace(chr(92),'',$text);
  echo $text;

返回:

保存为

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 2013-10-08
    • 2019-03-14
    • 2011-04-11
    相关资源
    最近更新 更多