首页 > 解决方案 > 用于具有相同输出的转义字符串的 PHP 和 javascript

问题描述

我知道默认情况下 javascript 会忽略反斜杠 \ 字符。我正在尝试在 PHP 和 Javascript 中编写 2 个方法,这些方法应该提供相同的输出。

示例:以下是原始字符串“.\+*?[^]$(){}=!<>|:-”

在阅读了原始字符串中的每个字符后,我得到了以下结果:

  1. 在 PHP中:".\+*?[^]$(){}=!<>|:-"

转义字符串为: ".\\\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:\-"

转义后的字符串是: ".\+*?[^]$(){}=!<>|:-" (与原始字符串一样)

  1. 在 Javascript中: .+*?[^]$(){}=!<>|:- (丢失的反斜杠 \ 字符)

转义字符串为: "\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:\-" (与PHP因为在阅读方法中丢失了反斜杠\字符)

转义后的字符串是:".+*?[^]$(){}=!<>|:-" (带有丢失的反斜杠 \ 字符)

对于任何给定的字符串(包括反斜杠 \ 字符),我怎样才能获得相同的 PHP 和 JS 的转义输出?

以下是 PHP 和 JS 中的代码

我认为唯一的解决方案是确保将 2 个反斜杠导入到任何需要检查的字符串中。如果字符串对于 \ 字符有 2 个反斜杠,则 PHP 和 JS 都会给出相同的输出。

标签: javascriptphpescapingbackslash

解决方案


好吧,这似乎需要很多代码来处理这个问题——我可能会去编码。例如,在 base64 编码中,该字符串为:“LlwrKj9bXl0kKCl7fT0hPD58Oi0="。在 php 中,base64_decode将返回您的字符串,在 javascript 中atob也将返回它。在一般情况下,您可以使用base64_encode和 在 javascript 中使用btoa.


推荐阅读