PHP - 如何替换 url 的特殊字符

2024-04-27

我正在尝试转换特殊字符(例如+, /, &, %)我将使用它们来进行 GET 请求。我为此构建了一个函数。

function convert_text($text) {

    $t = $text;

    $specChars = array(
        ' ' => '%20',    '!' => '%21',    '"' => '%22',
        '#' => '%23',    '$' => '%24',    '%' => '%25',
        '&' => '%26',    '\'' => '%27',   '(' => '%28',
        ')' => '%29',    '*' => '%2A',    '+' => '%2B',
        ',' => '%2C',    '-' => '%2D',    '.' => '%2E',
        '/' => '%2F',    ':' => '%3A',    ';' => '%3B',
        '<' => '%3C',    '=' => '%3D',    '>' => '%3E',
        '?' => '%3F',    '@' => '%40',    '[' => '%5B',
        '\\' => '%5C',   ']' => '%5D',    '^' => '%5E',
        '_' => '%5F',    '`' => '%60',    '{' => '%7B',
        '|' => '%7C',    '}' => '%7D',    '~' => '%7E',
    );

    foreach ($specChars as $k => $v) {
        $t = str_replace($k, $v, $t);
    }

    return $t;
}

当我使用some text作为函数的输入,我应该得到some%20text。但是,因为我在 foreach 循环中进行此替换,所以它首先将“空格”替换为%20在第二步中它替换%字符到%25。最终我得到some%2520text.

有没有其他方法或内置函数来进行这种替换?

rawurlencode 替换所有

EDIT

$t = str_replace(array_keys($specChars), array_values($specChars), $text);

我已经使用 str_replace 没有循环作为海绵巴勃罗 https://stackoverflow.com/users/1441828/spongepablo建议。

它给出了我不想要的相同结果。另一方面,如果我使用rawurlencode,它会转换一些我不希望它们被转换的其他字符。


有一个内置的 PHP 函数可以实现此目的,这是比手动执行更好的选择。

网址编码 http://php.net/manual/en/function.urlencode.php- php 的内置函数

但是,如果您仍然想手动执行此操作:

function convert_text($text) {

$t = $text;

$specChars = array(
    '!' => '%21',    '"' => '%22',
    '#' => '%23',    '$' => '%24',    '%' => '%25',
    '&' => '%26',    '\'' => '%27',   '(' => '%28',
    ')' => '%29',    '*' => '%2A',    '+' => '%2B',
    ',' => '%2C',    '-' => '%2D',    '.' => '%2E',
    '/' => '%2F',    ':' => '%3A',    ';' => '%3B',
    '<' => '%3C',    '=' => '%3D',    '>' => '%3E',
    '?' => '%3F',    '@' => '%40',    '[' => '%5B',
    '\\' => '%5C',   ']' => '%5D',    '^' => '%5E',
    '_' => '%5F',    '`' => '%60',    '{' => '%7B',
    '|' => '%7C',    '}' => '%7D',    '~' => '%7E',
    ',' => '%E2%80%9A',  ' ' => '%20'
);

foreach ($specChars as $k => $v) {
    $t = str_replace($k, $v, $t);
}

return $t;
}

将键和值放在最后,以便循环的最后一次迭代将用于空格

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP - 如何替换 url 的特殊字符 的相关文章

  • AngularJS + Laravel 5 身份验证

    在使用 AngularJS 构建 SPA 时 我想在 AngularJS 网站中实现用户身份验证 但是 我不知道从哪里开始以及最佳实践是什么 基本上我有一个确定可以担任一个或多个角色 我寻找了一些例子 这样我就可以对如何正确处理这个问题有一
  • PHP日期时间“下周星期三”给我星期一

    我正在尝试使用以下方法获取下周星期三的日期new DateTime next week wednesday 然而 它返回2016 12 19 00 00 00 000000今天是星期一 为什么会这样呢 如何得到正确的结果 我尝试在在线 PH
  • 将变量从 PHP 传递到 JavaScript 的有效方法[重复]

    这个问题在这里已经有答案了 有时我必须将一些变量从 PHP 传递到 JS 脚本 现在我是这样做的 var js variable 但这非常丑陋 我无法在 js 文件中隐藏我的 JS 脚本 因为它必须由 PHP 解析 处理这个问题的最佳解决方
  • 限制 WooCommerce 上的域名注册

    如何限制用户电子邮件对 WooCommerce 注册中特定域的访问 我发现这段代码可以做到这一点 但由于某种原因它在 WooCommerce 注册表单上不起作用 如果我进入 WP 登录页面 它就会起作用 任何帮助表示赞赏 function
  • 如何使用 PHP 创建动态页面标题

    大家好 我想知道是否有人可以帮助解决这个 PHP 问题 是否可以使用 H2 标记中的文本并使用它来动态填充页面标题 我还希望能够使用相同的技术将 H2 文本添加到元描述中 有人可以帮忙吗 如果您的 h2 文本是动态创建的 那么网页的其他部分
  • 使用 PHP 将 mysql 值转储到 JSON 文件中

    我正在尝试使用 PHP 从 mysql 数据库生成 JSON 文件 到目前为止 我有
  • PHP:__toString() 和 json_encode() 不能很好地协同工作

    我遇到了一个奇怪的问题 我不知道如何解决它 我有几个类 它们都是 JSON 对象的 PHP 实现 这是问题的说明 class A protected a public function construct this gt a array n
  • 如何在 laravel/php 中访问该集合的内容

    我是 Laravel 的新手 正在做一个构建迷你社交网络应用程序的项目 我有一个与用户模型有关系的帖子模型 我有一个帖子页面 其中仅显示经过身份验证的用户及其朋友的帖子 在我的 PostController 中 我像这样查询经过身份验证的用
  • PHP DOM 获取节点值 html? (不剥离标签)

    我正在尝试使用nodeValue获取文件中div标签的innerhtml 但是此代码仅输出纯文本 并且似乎从div内部删除了所有html标签 我如何更改此代码以输出 div 的 HTML 内容而不是纯文本 并且还输出包装其子元素的主 div
  • PHP:从 array_values() 内的值中去除标签

    我想在用选项卡爆炸之前将标签从 array values 内的值中剥离出来 我尝试使用下面的这一行 但出现错误 output implode t strip tags array keys item 理想情况下 我想从值中去掉换行符 双空格
  • 如何在xampp中启用curl

    我面临下面给出的错误 致命错误 在第 11 行调用 E xampp htdocs new functions php 中未定义的函数curl init 我已经做出了改变php ini 我把前面的分号去掉了 extension php cra
  • 如何使用来自数据库的值来定义 Twig 模板的全局变量?

    我想为 twig 定义一个全局变量 可以从任何模板访问它 我可以在 symfony 中创建一个全局变量config packages twig yaml 但我需要它是从数据库获取的值 在 twig 的文档中 它说使用此代码 twig new
  • 在 PHP 中计算 Cookie 大小

    我想使用 php 在服务器端读取 cookie 并计算其长度 但找不到任何直接方法来执行此操作 那么如何实现这个任务呢 那这个呢 setcookie user Dino babu kannampuzha time 3600 if isset
  • 表单未使用 AJAX 提交

    再次更新 如果有人关心的话 我之前发布的解决方案由于某种原因停止工作 我在 ajax 请求中包含了 beforeSend 并将验证表单的 js 部分粘贴到其中 现在就像一个魅力 form on submit function e e pre
  • 如何理顺 Laravel Blade @extends 的执行顺序?

    In 我尝试找到一种通过引用刀片 include来传递变量的方法 https stackoverflow com questions 25437939 how to pass variables by reference to includ
  • 如何使 WordPress 中的自定义模板充当受密码保护的页面?

    我正在使用自定义模板构建一个页面 问题是 我需要此页面受密码保护 或者至少可供登录用户访问 但即使我在 WordPress 管理的新页面部分中将其设置为此类 私人 密码保护 它也不会显示菜单项和内容 如果是私有的 或者它会立即显示页面内容
  • 如何在 MySQL 中使用 INET_ATON 进行通配符搜索 IP 地址?

    我发现这个方法可以使用 INET ATON 将 IP 地址作为整数存储在 MySQL 数据库中 https stackoverflow com a 5133610 4491952 https stackoverflow com a 5133
  • PHP 中 while (true){ 是什么意思?

    我看过这段代码 但不知道这意味着什么 while true echo Hello world 我知道什么是 while 循环 但是 while true 是什么意思 会执行多少次 这不是无限循环吗 虽然是无限循环 但您可以使用以下命令退出它
  • 如何在 Api-Platform 中按链接属性过滤结果?

    我有一个User实体和一个Organisation实体 存在关系ManyToOne之间Booking and User ORM ManyToOne targetEntity App Entity User inversedBy bookin
  • /bootstrap/start.php 中的 Laravel 错误:\Illuminate\Foundation\Application 未找到

    因此 我在开发服务器上安装了 Laravel php5 5 3 标准安装 安装了 mcrypt 并收到以下错误消息 Fatal error Class Illuminate Foundation Application not found

随机推荐

  • Angular ngRoute“控制器”声明是否必要?

    阅读了 api 和开发人员指南后 我仍然不明白在给定路由中声明 控制器 所 提供的功能 现在我只是在我的视图中将控制器声明为 ng controller 指令 ngRoute 只是提供一种替代方法吗 为了在代码中明确我的问题 请参见下文 I
  • 如何将服务添加到 .Net 中属性网格的类型描述符上下文中?

    我有一个应用程序 允许用户在设计时选择图像 无论是直接图像还是从图像列表中 到目前为止 一切都很酷 除了这不是发生在 Visual Studio 属性浏览器中 而是发生在作为类型编辑器一部分的属性网格中 我的问题是 图像选择器 实际上是资源
  • RequestContextHolder 是线程安全的吗?

    在我的 Spring JDBC 项目中 我有一个名为DBStuff我用它来连接到数据库并进行简单的数据库操作 这是一个Web项目 有用户 所以自然我使用会话机制 当我需要检索请求数据时DBStuff类 我使用下面这行代码 HttpServl
  • 为什么我们不能在打字稿的类中使用 let 关键字

    我是 TypeScript 新手 我想知道为什么我们不能使用let类内变量声明的关键字 如下所示 提前致谢 class Greeter let greeting string constructor message string this
  • 使用 asyncio 处理超时

    免责声明 这是我第一次尝试asyncio module 我在用着asyncio wait通过以下方式尝试支持等待一组异步任务的所有结果的超时功能 这是一个更大的库的一部分 因此我省略了一些不相关的代码 请注意 该库已经支持提交任务并使用 T
  • 是否可以在控制器外部获取运行时的路线数据?

    我想知道是否有可能以某种方式获取控制器外部的路由值 这是我尝试过的 我也尝试过做 Values projectId 但我仍然得到null RoutePrefix projects public class UsergroupControll
  • 如何使用 ServiceStack JsonSerializer 序列化 ExpandoObject?

    是否可以让 ServiceStack JsonSerializer 将 ExpandoObject 序列化为平面对象而不是字典 大致类似于这样 x xvalue y Date 1313966045485 我正在尝试比较 JSON 序列化Ex
  • .NET 的 BBCode 或 wiki 标记库? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 您最喜欢用于处理以下任一问题的 NET 库是什么 BBCode http en wikipedia org wiki BBCode markup
  • 图标字体的正确字体显示值

    font display https www w3 org TR css fonts 4 font display desc是一个新的 CSS 属性 允许开发人员根据字体加载速度是否足够快来控制字体的呈现方式 已经有几篇文章介绍了 使用 f
  • 如何保证按一定顺序调用的AJAX请求得到相同顺序的响应?

    如何保证按一定顺序调用的AJAX请求得到相同顺序的响应 首先 请记住 服务器本身可能不会按照收到请求的顺序返回响应 想象一下 如果您首先触发一个复杂的 ajax 请求 然后触发一个简单的 ajax 请求 可能引用一些缓存的静态数据 第二个请
  • 如何使用 AndEngine (Android) 移动精灵对象

    我正在使用 andengine 在 android 中开发游戏 我在精灵中放置了一个对象 例如 this mTexture new Texture 32 32 TextureOptions BILINEAR PREMULTIPLYALPHA
  • 在 ubuntu 10 64 位上安装 java 时出错

    EDIT 我添加此注释是为了解释为什么我将这个问题保留在这里 我添加了 Android 作为关键字 我想知道其他人是否尝试过下载代码以及如何解决此问题 我担心如果我问 Ubuntu 他们会建议我使用 OpenJDK 但问题是 有人使用该 S
  • Tkinter:尝试点击离开时窗口闪烁

    我已经尝试这样做有一段时间了 但还没有找到方法 我有一个 tkinter 脚本 当按下按钮时会创建一个弹出窗口 但是 我不希望用户能够从该窗口单击到之前创建的任何窗口 我已经使用 root grab set 进行了此操作 但是没有任何迹象表
  • 如何在 Laravel 5.4 中将 base64 转换为图像?

    我正在 Laravel 5 4 中开发 api 我将收到 Base64 格式的图像 如何在 Laravel 中将 base64 转换为图像 该解决方案将处理所有图像类型 image request gt input image image
  • 将 Spring Boot Web 应用程序与 Pivotal TC Server 结合使用

    我从 Spring Tool Suite 内部将项目重构为 Spring Boot 应用程序 所有文档都展示了如何创建一个带有嵌入式 Tomcat 实例的自包含应用程序 该应用程序可以工作并且很棒 然而在此之前 我有自己的 Maven We
  • 使用 CSS 与使用列和行调整文本区域大小

    使用列和行调整文本区域大小与使用高度和宽度调整文本区域大小有什么区别
  • 如何将变量从一个 PowerShell 脚本加载到另一个?

    我有一个主脚本正在调用其他几个脚本 我需要将其他脚本中的变量加载到主脚本中 以便我可以将它们转储到 html 文件中 我尝试对我正在调用的脚本进行点采购 但这不起作用 或者我做错了什么 任何帮助 将不胜感激 脚本的示例部分 get clus
  • 在弹出窗口中打开 Google Play(如 Vimeo、Wisher、Buzzfeed)- 即时应用

    如何在 Wisher Buzzfeed Vimeo 等弹出窗口中打开 Google Play 我在看谷歌文档 https developer android com distribute marketing tools linking to
  • C# 以编程方式访问 Excel 宏

    我正在使用 Excel 文件的目录来获取有关每个文件的信息 我正在尝试使用 C Excel 互操作来收集有关与其中一些文件关联的 VBA 宏的信息 其代码如下 问题在于 所有 Excel 文件都没有启用对宏的编程访问 我可以在文件的本地副本
  • PHP - 如何替换 url 的特殊字符

    我正在尝试转换特殊字符 例如 我将使用它们来进行 GET 请求 我为此构建了一个函数 function convert text text t text specChars array gt 20 gt 21 gt 22 gt 23 gt