سؤال

أحاول الحصول على معرف المستخدمين من سلسلة مثل:

http://www.abcxyz.com/123456789/

لظهور 123456789 بشكل أساسي تجريد المعلومات حتى الأول / وأيضًا إزالة النهاية /. لقد ألقيت نظرة على الشبكة ولكن يبدو أن هناك الكثير من الحلول ولكن لا شيء يجيب على كل من البداية والنهاية.

شكرًا :)

تحديث 1

يمكن أن يأخذ الرابط نموذجين: mod_rewrite على النحو الوارد أعلاه وأيضًا "http://www.abcxyz.com/profile؟user_id=123456789"

هل كانت مفيدة؟

المحلول

سأستخدم parse_url() لاستخراج مكون المسار بشكل نظيف من عنوان URL:

$path = parse_URL("http://www.example.com/123456789/", PHP_URL_PATH);

ثم تقسيم المسار إلى عناصره باستخدام explode():

$path = trim($path, "/"); // Remove starting and trailing slashes
$path_exploded = explode("/", $path);

ثم إخراج المكون الأول من المسار:

echo $path_exploded[0]; // Will output 123456789

ستعمل هذه الطريقة في حالات الحافة مثل

  • http://www.example.com/123456789?test
  • http://www.example.com//123456789
  • www.example.com/123456789/abcdef

وحتى

  • /123456789/abcdef

نصائح أخرى

$string = 'http://www.abcxyz.com/123456789/';
$parts = array_filter(explode('/', $string));
$id = array_pop($parts);

إذا كان المعرف دائمًا هو آخر عضو في عنوان URL

$url="http://www.abcxyz.com/123456789/";
$id=preg_replace(",.*/([0-9]+)/$,","\\1",$url);
echo $id;

إذا لم يكن هناك أرقام أخرى في عنوان URL ، فيمكنك أيضًا القيام بذلك

echo filter_var('http://www.abcxyz.com/123456789/', FILTER_SANITIZE_NUMBER_INT);

لتجريد كل ما ليس رقمًا.

قد يكون ذلك أسرع إلى حد ما من استخدام parse_url+parse_str مزيج.

إذا لم يحتوي المجال الخاص بك على أي أرقام ، فيمكنك التعامل مع كلتا الحالتين (مع أو بدون user_id) باستخدام:

<?php

$string1 = 'http://www.abcxyz.com/123456789/';
$string2 = 'http://www.abcxyz.com/profile?user_id=123456789';

preg_match('/[0-9]+/',$string1,$matches);
print_r($matches[0]);


preg_match('/[0-9]+/',$string2,$matches);
print_r($matches[0]);


?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top