Php 检查字符串是否以字符串开头
我是一个应用程序的iOS开发负责人,说来话长,但我们的自由职业者API开发“不可用”。所以我对laravel/PHP是一个完全的新手,并试图修复我们API上的一个bug 基本上,当用户在默认情况下注册时,我们会拍摄他们的Facebook个人资料图片,并将其URL保存在数据库中,作为应用程序的个人资料图片。当他们添加自定义图片时,它将与随机字母数字字符串保存一起保存,并且该字符串将在Php 检查字符串是否以字符串开头,php,regex,laravel,Php,Regex,Laravel,我是一个应用程序的iOS开发负责人,说来话长,但我们的自由职业者API开发“不可用”。所以我对laravel/PHP是一个完全的新手,并试图修复我们API上的一个bug 基本上,当用户在默认情况下注册时,我们会拍摄他们的Facebook个人资料图片,并将其URL保存在数据库中,作为应用程序的个人资料图片。当他们添加自定义图片时,它将与随机字母数字字符串保存一起保存,并且该字符串将在profile\u pic列中设置。当在JSON对象中返回profile\u pic时,我们的基本URL会附加到起始
profile\u pic
列中设置。当在JSON
对象中返回profile\u pic
时,我们的基本URL会附加到起始位置
所以问题是,这个基本URL也被附加到Facebook图像URL的开头,因此看起来像https://base.url/https://facebook.url
这意味着用户看不到图像,只看到默认的占位符灰色。我希望能够检查URL是否已经以某个值开始
这就是我到目前为止所做的:
public function getProfilePicAttribute($value){
$fbUrl = "https://scontent.xx.fbcdn.net"
$length = strlen($fbUrl);
if (substr($value, 0, $length) === $fbUrl) {
return $value
}
return 'https://' . env('VDT_DOMAIN') . '/uploads/profile_pic/' . $value;
}
这不起作用,所以我想知道是否有人能帮我解决这个问题。提前感谢您的建议 您可以使用
strpos
(),而不是截断要比较的字符串
您可以使用
strpos
(),而不是截断要比较的字符串
拉威尔有一个很好的助手。例如,这将返回true
:
starts_with('This is my name', 'This');
拉威尔有一个很好的助手。例如,这将返回true
:
starts_with('This is my name', 'This');
这是为了说明Alexey上述方法的用法
public function getProfilePicAttribute($value){
$fbUrl = "https://scontent.xx.fbcdn.net";
$length = strlen($fbUrl);
if(starts_with($fbUrl, 'base.url')){
return $value;
}
return 'https://' . env('VDT_DOMAIN') . '/uploads/profile_pic/' . $value;
其中base.url是在值之前连接的url,这是为了显示上述Alexey方法的用法
public function getProfilePicAttribute($value){
$fbUrl = "https://scontent.xx.fbcdn.net";
$length = strlen($fbUrl);
if(starts_with($fbUrl, 'base.url')){
return $value;
}
return 'https://' . env('VDT_DOMAIN') . '/uploads/profile_pic/' . $value;
如果base.url是在文档中指出的值之前连接的url,请确保使用
=
,因为此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。有关更多信息,请阅读布尔值部分。使用===运算符测试此函数的返回值。因此,执行==0
就是检查它是否以字符串开头。谢谢您的回答!当我使用这个的时候,我仍然得到一个500-你知道问题可能是什么吗?对不起,如果我问的是新手问题!我刚刚注意到strpos
中的第二个变量不正确-我将首先更改该变量,看看它是否按照文档中的说明工作,确保使用==
,因为此函数可能返回布尔值FALSE,但也可能返回计算结果为FALSE的非布尔值。有关更多信息,请阅读布尔值部分。使用===运算符测试此函数的返回值。因此,执行==0
就是检查它是否以字符串开头。谢谢您的回答!当我使用这个的时候,我仍然得到一个500-你知道问题可能是什么吗?对不起,如果我问的是新手问题!我刚刚注意到strpos
中的第二个变量不正确-我将首先更改它,看看它是否有效谢谢您的回答!很抱歉,这让我很痛苦,但您能在我的代码上下文中演示一下这是如何工作的吗?在laravel 6字符串帮助程序被弃用后,此解决方案变为Str::startsWith('this is my name','this')代码>非常感谢您的回答!很抱歉,这让我很痛苦,但您能在我的代码上下文中演示一下这是如何工作的吗?在laravel 6字符串帮助程序被弃用后,此解决方案变为Str::startsWith('this is my name','this')代码>