【发布时间】:2011-02-27 21:08:19
【问题描述】:
这是我想要在 PHP 中实现的目标:
我有这个字符串:host/%%%25asd%%
现在我想遍历它并只用 %25 替换 %_blank 字符。所以我得到的输出是主机/%25%25%25asd%25%25。 (%25 没有被触及,因为 % 后面没有另一个 %)
我应该怎么做?正则表达式?如果是这样,你有一个例子吗?或遍历字符串中的每个字符并替换?我正在考虑为此使用 str_pos 但它可能在一次替换后,字符串中的位置会改变:(
[编辑:让我添加更多信息以缓解混乱。 %25 只是一个例子,它可能是 %30 或 %0a 之类的,我事先不知道。此外,该字符串也可以是 host/%%25asd%%,因此只需将 %% 替换为 host/%2525asd%25 而不是 host/%25%25asd%25。我想要实现的是将 url 解析为谷歌希望它用于他们的 websafe api 的方式。 http://code.google.com/apis/safebrowsing/developers_guide_v2.html#Canonicalization。如果你看看他们奇怪的例子。]
【问题讨论】:
-
虽然像
s/%(?![0-9a-f]+)/%25/ig;这样的东西可以解决 % 转义问题,但要构造方法来验证该 google api 链接中的规范化实现,还有很长的路要走。 -
我现在明白了罪,例子从一个到另一个变得可怕。大多数时候你需要递归!不管怎样,我会解决它,也许会在 GPL 许可下发布一个 php 类,所以下一个人不必为此挠头 2 天。例如:- host/%2525252525252525 => host/%25 (加入下一个“25”的 %25="%" 成为另一个 %25 并递归地继续)小心并感谢您的反馈!
-
没问题,祝你好运。
s/%(?:25){2,}/%25/g