【问题标题】:Does PHP str_replace have a greater than 13 character limit?PHP str_replace 是否有大于 13 个字符的限制?
【发布时间】:2011-10-15 02:21:05
【问题描述】:

这一直有效,直到第 13 个字符被击中。一旦 str_ireplace 在 cyper 数组中命中“a”,str_ireplace 就会停止工作。

数组的大小是否有限制?请记住,如果键入“abgf”我会得到“nots”,但如果我在应该得到“notes”时键入“abgrf”,我会得到“notrs”。绞尽脑汁想不通。

$_cypher = array("n","o","p","q","r","s","t","u","v","w","x","y","z","a","b","c","d","e","f","g","h","i","j","k","l","m");

$_needle = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");


$_decryptedText = str_ireplace($_cypher, $_needle, $_text);
echo $_decryptedText;

帮助?

【问题讨论】:

标签: php compiler-errors str-replace


【解决方案1】:

使用strtrDocs:

$_text = 'abgrf';

$translate = array_combine($_cypher, $_needle);

$_decryptedText = strtr($_text, $translate);

echo $_decryptedText; # notes

Demo


但是,是不是我做错了什么?

它将替换每一对,在已经替换的字符串上一个接一个地替换。因此,如果您替换了再次替换的字符,则可能会发生这种情况:

    r -> e   e -> r
abgrf -> notes -> notrs

您的电子替代品是在您的 r-替代品之后发生的。

【讨论】:

  • 啊。所以就像@ircmaxell 说的那样,它正在进行循环替换。除了使用 str_rot13 之外,还有其他方法可以像我一样完成任务吗?
  • @Firemarble:正如strtr 所写。我添加了一个示例。
【解决方案2】:

查看str_replace 的文档。即以下行:

因为 str_replace() 从左到右替换,所以在进行多次替换时,它可能会替换先前插入的值。另请参阅本文档中的示例。

所以它按规定工作。它只是进行循环替换(n -> a,然后是 a -> n)。

【讨论】:

    【解决方案3】:

    使用str_rot13

    【讨论】:

    • 谢谢,这行得通。但是,是不是我做错了什么?
    【解决方案4】:

    虽然看起来是直的 rot13,但如果不是,另一种选择是使用strtr()。您提供一个字符串和一个替换对数组,然后返回结果翻译。

    【讨论】:

      猜你喜欢
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多